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;
}
第七步:测试效果。
从结果我们可以看出,程序运行正常,结果符合预期。