C语言版数据结构:[1]线性顺序表
在数据结构中,线性表是入门级数据结构,线性表又分为顺序表和链表,这一节我们就说一下线性顺序表的C语言实现。坐标为您分享。
操作方法
- 01
第一步:线性顺序表的创建。 线性顺序表是存储在一个连续的数组中的,因此对其数据类型有一个结构体声明。 #include <stdio.h> #include <stdlib.h> #define MaxSize 20 typedef int datatype; typedef struct list { datatype data[MaxSize]; int last; }seqlist;
- 02
第二步:添加元素。 在顺序线性表中添加元素的原理就是,找到给定的位置,将给定位置到线性表结束的所有元素后移一位,然后将新元素添加到给定的位置中。
- 03
/*在顺序线性表中i的位置添加元素x*/ int insert_seqlist(seqlist *l,datatype x,int i) { int j; if((*l).last > MaxSize) { printf("溢出\n"); return 0; } else if((i<1)||(i>(*l).last+1)) { printf("位置有误\n"); return 0; } else { for(j=(*l).last-1;j>=i-1;j--) (*l).data[j+1] = (*l).data[j]; (*l).data[i-1] = x; (*l).last = (*l).last + 1; return 1; } } /*在顺序线性表中i的位置添加元素x*/
- 04
第三步:查找元素。 给定元素的值,查找线性表中是否存在该元素,做法是遍历所有线性表中的元素,如果存在则返回元素的位置,否则正常结束。
- 05
/*在顺序线性表中查找给定值为X的节点*/ int search_seqlist(seqlist *l,datatype x) { int j; for(j=0;j<(*l).last-1;j++) { if((*l).data[j] == x) return j+1; } return 0; } /*在顺序线性表中查找给定值为X的节点*/
- 06
第四步:删除指定位置的元素。 原理是将指定位置以后的所有元素集体前移一位。
- 07
/*在顺序线性表中i的位置删除元素x*/ int del_seqlist(seqlist *l,int i) { int j; if(i>MaxSize) { printf("超出线性表范围。\n"); return 0; } else if(i<1||i>(*l).last) { printf("该节点不存在。\n"); return 0; } else { for(j=i-1;j<(*l).last;j++) (*l).data[j] = (*l).data[j+1]; (*l).last--; return 1; } } /*在顺序线性表中i的位置删除元素x*/
- 08
第五步:线性表的输出。 将线性表中的所有元素全部输出,每四个一行。
- 09
/*输出顺序线性表的全部值*/ void prf_seqlist(seqlist *l) { int j; for(j=1;j<=(*l).last;j++) { printf("%d ",(*l).data[j-1]); if(j%4==0) printf("\n"); } printf("\n"); } /*输出顺序线性表的全部值*/
- 10
第六步:主函数测试。 我们先建立包含九个元素的线性表(测试添加函数),然后查找包含数值为5的元素是否存在(测试查找函数),并将其删除(测试删除函数),并输出所有元素(测试输出函数)。
- 11
int main() { seqlist *l; (*l).last = 0; int a; int j; int locate; for(j=1;j<10;j++) { printf("please input number:"); scanf("%d",&a); insert_seqlist(l,a,j); } prf_seqlist(l); locate = search_seqlist(l,5); del_seqlist(l,locate); prf_seqlist(l); system("pause"); return 0; }
- 12
第七步:测试效果。 从结果我们可以看出,程序运行正常,结果符合预期。