C语言库函数里有线性表基本操作函数吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言库函数里有线性表基本操作函数吗?相关的知识,希望对你有一定的参考价值。
在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。C语言标准库没有线性表的操作
但是C++ STL提供了很多函数/数据结构 参考技术A 没有这个吧。 参考技术B 只有一些求长度,复制等操作 参考技术C 有,看你是在什么平台下
第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数
【项目1-有序数组中插入数据(函数版)】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目1-有序数组中插入数据(函数版)】.cpp
* 作 者:张易安
* 完成日期:2016年 9 月 9 日
* 版 本 号:v1.0
*
* 问题描述: 有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),
* 可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。
* 例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用函数insert(a, n, m)后,a中数据为1 7 8 17 23 24 50 59 62 101,n=10。
*/
#include<stdio.h>
#define N 100
int insert(int[] ,int ,int );
int main()
int a[N]=1,7,8,17,23,24,59,62,101;
int i,n=9;
int m=50;
n = insert(a,n,m);
for(i=0;i<n;i++)
printf("%d\\t",a[i]);
printf("\\n");
return 0;
/*
insert(a,n,m)的函数功能是插入一个数字到顺序数组中
入口参数:
a-存放数字的数组
n-数字的个数
m-插入的数字
*/
int insert(int a[],int n,int m)
int i=n-1;//先是把数组的个数减少一个 ,因为是从0开始a[0]=1
while(a[i]>m&&i>=0)//当个数大于0且数组中的值大于m时
a[i+1]=a[i];//数组中的值向后退一位
i--;
i++;//因为不加一的话就会在24上赋值
a[i]=m;//m的值赋给数组
n++;//10个数字
return n;
//体会,当看不懂一个程序的时候。最好的方法就是把自己当做电脑按着步骤自顶向下一步一步的执行,或者一步一步调试便于理解
运行结果
【项目2 - 删除数组元素】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目2 - 删除数组元素】.cpp
* 作 者:张易安
* 完成日期:2016年 9 月 9 日
* 版 本 号:v1.0
*
* 问题描述:del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。
(2)如果在函数调用时,要求数组中的元素呈升序排列呢?
*/
#include<stdio.h>
int del(int a[],int n,int x);
int main()
int a[20]=12,45,78,47,58,25,36,98,56,25,41,45,48,42,35,59,75,41,24,86;
int i,n;
n = del(a,20,75);
for(i=0;i<n;i++)
printf("%d\\n",a[i]);
printf("\\n");
return 0;
/*
del(int a[],int n,int x)函数是为了珊瑚数组中的一个元素
输入参数
a[]-数组元素
n-数组个数
x-要删除的数字
*/
int del(int a[],int n,int x)
int p,q=0;
for(p=0;p<n;p++)
if(a[q]!=x)
a[p]=a[q];
p++;
return p;//我就想不通了,为什么把p还给主函数了后就会输出不一样的解雇,难道是改变了数组?
运行结果
【项目3 - 数组的排序】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目4-工资的排序】.cpp
* 作 者:张易安
* 完成日期:2016年 9 月 9 日
* 版 本 号:v1.0
*
* 问题描述:从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后对工资数据进行排序,将排序后的结果保存到文件ordered_salary.txt中。
做完打开文件看看结果,玩这么多数据于股掌之间,相信你会有成就感的。
*/
#include<stdio.h>
void bubble_sort(int arr[],int num);
void output_array(int arr[],int num);
int main()
int a[20]=87,76,62,58,77,85,92,88,77,67,80,68,88,87,64,59,61,76,75,63;
int b[15]=27,61,49,88,4,20,28,31,42,62,64,14,88,27,73;
bubble_sort(a,20);
output_array(a,20);
bubble_sort(b,15);
output_array(b,15);
return 0;
void bibble_sort(int arr[],int num)
int i,j,t;
for(j=0;j<num-1;j++)//num-1趟比较
for(i=0;i<num-j-1;i++)//每趟进行num-J次两两比较
if(arr[i]<arr[i+1])
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
return;
void output_array(int arr[],int num)
int i;
for(i=0;i<num-1;i++)
printf("%d",arr[i]);
printf("%d\\n",arr[num-1]);
return;
//又是这个算法,要记下来,自己做一直都想不起来!
运行结果
【项目4 - 查成绩】
/*
* Copyright (c) 2016, CSDN学院
* All rights reserved.
* 文件名称:【项目4-工资的排序】.cpp
* 作 者:张易安
* 完成日期:2016年 9 月 9 日
* 版 本 号:v1.0
*
* 问题描述:score1.txt提供了某大学两个班某次测验的数据,包括每位同学的学号及成绩。
*请编程序,输入学号,查找出该同学的成绩。
*提示1:可以定义两个int型数组,其中一个n存放学号,另一个s存放成绩,可以保证两个数组中,元素下标相同,对应的是同一位同学。例如n[18]值为3123,s[18]为98,说明学号为3123的同学成绩为98。
*提示2:因为数据无序,运用顺序查找算法,在n数组中依据学号进行查找,在s数组中对应下标的值则为其成绩。例如,通过在n中的查找,得出学号为3123的同学的下标为18,则其成绩为s[18]。
*下面是完成应用的部分代码,已经能够输出成绩清单。请在此基础上实现有关的函数:
*/
#include<stdio.h>
#include<stdlib.h>
int readData(int[], int []);
int search(int[], int, int);
int main()
int num[200],score[200];
int count;
int index;
int key;
count = readData(num,score);
scanf("%d",&key);
index = search(num,count,key);
if(index>=count)
printf("不存在学号为%d的同学\\n",key);
else
printf("序号为%d的同学的成绩是:%d\\n",key,score[index]);
return 0;
int readData(int n[],int s[])
int c=0;
FILE *fp;
fp = fopen("scorel.txt","r");
if(fp==NULL)
printf("open file error!\\n");
exit(0);
//套路
while(fscanf(fp,"%d%d"
,&n[c],&s[c])!=EOF)
c++;
fclose(fp);
return c;
int search(int n[],int c,int k)
int i;
for(i=0;i<c;i++)
if(n[i]==k)
break;
if(i==c)
i=-1;
return i;
运行结果
以上是关于C语言库函数里有线性表基本操作函数吗?的主要内容,如果未能解决你的问题,请参考以下文章
第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数
第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数