导读:线性表是一种最简单的线性结构。线性表的主要操作特点是可以在任意位置插入和删除一个数据元素。线性表可以用顺序存储结构和链式存储结构存储。用顺序存储结构实现的线性表乘坐顺序表,用链式存储结构实现的线性表称为链表。今天就来用C语言实现简单的线性表。
在C语言中,我们要实现数据结构需要通过结构体,所以第一步我们要定义一个结构体,它的作用是实现顺序表,我们将他它的类型定义为Int型,如下
#include <stdio.h> #define MAX 100 typedef struct{//定义数据结构 int list[MAX]; int size; }SeqList;
顺序表已经通过结构体实现了,我们如果想要使用它,还需要定义各个使用操作的对应方法(增、删、改、取、遍历)
在实现这些操作之前,我们需要注意一个问题——我们定义的结构体中size还未赋初始值,因此我们需要先写一个初始化函数。
初始化函数:
//初始化 void ListInitiate(SeqList *L){ L->size=0; //将顺序表中的元素个数赋初始值为0 }接下来,我们来实现增、删、改、取
增(实现在任意位置均可插入数据元素)
思路:将需要新增的位置到顺序表末尾依次向后移动一个位置,然后将空出的位置插入新的数据元素。
//插入数据 int ListInsert(SeqList *L,int i,int x){ if(L->size>MAX){ //如果表中已有数据数量超出表的容量即不允许插入 printf("顺序表已满无法插入"); return 0; }else if(i<0 || i>L->size){//如果插入位置越界,则不允许插入 printf("插入位置参数不合法"); return 0; }else{ for(int j=L->size;j>i;j--){ //插入数据,首先把插入位置之后的所有的数据全部往后移动一个位置。 L->list[j]=L->list[j-1]; } L->list[i]=x;//然后再插入数据到空出来的位置里。 L->size++;//最后将当前的数据个数加一 return 1; } }
删(实现删除任意位置的数据元素)
思路:将删除位置的下一个位置一直到顺序表末尾的所有顺序依次向前移动一个位置覆盖掉需要删除的数据元素实现删除的功能。
//删除数据 int ListDelete(SeqList *L,int i){ if(i<0 || i>L->size){//如果删除位置越界,则不允许删除 printf("删除位置参数不合法"); return 0; }else{ for(int j=L->size-1;j>i;j--){//删除操作,将需要删除的数据之后的所有数据往前移动一个位置,使得需要被删除的数据直接被覆盖掉达到删除的效果。 L->list[j-1]=L->list[j]; } L->size--;//最后将当前的数据个数减一 return 1; } }
改(实现修改数据元素)
思路:通过位置修改数据元素
//修改数据 int ListUpdate(SeqList *L,int i,int x){ if(i<0 || i>L->size){//如果修改位置越界,则不允许修改 printf("修改位置参数不合法"); return 0; }else{ L->list[i]=x;//修改 return 1; } }
取(实现根据位置取数据元素)
思路:通过位置获取数据元素
//取数据 int GetList(SeqList *L,int i){ if(i<0 || i>L->size){ //如果需要查找的位置越界,则不允许查找 printf("需要查找的位置参数不合法"); return 0; }else{ return L->list[i];//返回要查找的位置的数据 } }
遍历(实现遍历完整的顺序表)
思路:遍历
//输出整个顺序表 void PrintList(SeqList *L){ for(int k=0;k<L->size;k++) printf("第%d个,值为:%d\n",k,L->list[k]); }
在实现所有的操作后,我们来进行测试
void main(){ SeqList L; ListInitiate(&L);//初始化 ListInsert(&L,0,190); //执行插入 ListInsert(&L,1,290); ListInsert(&L,2,390); PrintList(&L);//打印整个表 ListDelete(&L,2);//删除数据 PrintList(&L);//打印整个表 ListUpdate(&L,1,15);//修改数据 PrintList(&L);//打印整个表 }
程序运行结果
第0个,值为:190 第1个,值为:290 第2个,值为:390 第0个,值为:190 第1个,值为:290 第0个,值为:190 第1个,值为:15 Press any key to continue
发表评论