您的位置首页百科知识

C语言版数据结构:[1]线性顺序表

C语言版数据结构:[1]线性顺序表

的有关信息介绍如下:

C语言版数据结构:[1]线性顺序表

在数据结构中,线性表是入门级数据结构,线性表又分为顺序表和链表,这一节我们就说一下线性顺序表的C语言实现。坐标为您分享。

第一步:线性顺序表的创建。

线性顺序表是存储在一个连续的数组中的,因此对其数据类型有一个结构体声明。

#include

#include

#define MaxSize 20

typedef int datatype;

typedef struct list

{

datatype data[MaxSize];

int last;

}seqlist;

第二步:添加元素。

在顺序线性表中添加元素的原理就是,找到给定的位置,将给定位置到线性表结束的所有元素后移一位,然后将新元素添加到给定的位置中。

/*在顺序线性表中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*/

第三步:查找元素。

给定元素的值,查找线性表中是否存在该元素,做法是遍历所有线性表中的元素,如果存在则返回元素的位置,否则正常结束。

/*在顺序线性表中查找给定值为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的节点*/

第四步:删除指定位置的元素。

原理是将指定位置以后的所有元素集体前移一位。

/*在顺序线性表中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*/

第五步:线性表的输出。

将线性表中的所有元素全部输出,每四个一行。

/*输出顺序线性表的全部值*/

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");

}

/*输出顺序线性表的全部值*/

第六步:主函数测试。

我们先建立包含九个元素的线性表(测试添加函数),然后查找包含数值为5的元素是否存在(测试查找函数),并将其删除(测试删除函数),并输出所有元素(测试输出函数)。

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;

}

第七步:测试效果。

从结果我们可以看出,程序运行正常,结果符合预期。