数据结构基本操作集的C语言实现(一)
(一) 顺序表
1.常用操作
(1)、顺序表的结构体定义
//顺序表的结构体定义
typedef struct
{
int data[MAXNUM];
int last=-1;//记录最后一个节点的位置。如果last=-1,表是空表
}SeqList;
定义方法:SeqList L;
///建立新表方法
for(int i=0;i<MAXSIZE;i++)
{
int d;
scanf("%d",&d);
L->data[i]=d;
L->last++;
}
(2)顺序表的初始化
SeqList* Init_SeqList()
{
SeqList *p;
p=(SeqList*)malloc(sizeof(SeqList));
if(p==NULL)//判断空间申请是否成功
return NULL;
return p;
]
(3)、顺序表的长度
int Lenth_SeqList(SeqList *L)
{
return L->last+1;
}
(4)、取表中第i个元素
//由于表中元素是从第0个元素开始存储,故应取表中存储序号为i-1的元素。
int Get_List(SeqList *L,int post)//post是是取第post个元素
{
if(L->last==-1)//防止空列表
{
printf("empty List!");
exit(0);
}
else if(post>L->last)//防止数组越界。
{
printf("out of limit");
exit(0);
}
reutrn L->data[post-1];
}
(5)、按值查找
int Locate_SeqList(Seqlist *L,int d)
{
if(L->list==-1)
{
printf("empty List!");
exit(0);
}
for(int i=0;i<=L->list;i++)
{
if(L->data[i]==d)
{
return i+1;
}
}
printf("not find this data");
exit(0);
}
(5)、插入操作
在第i个元素后插入(插入到data[i])
SeqList* Init_SeqL(SeqList* L,int post,int d)
{
if(post>=MAXSIZE)
{
printf("越界");
return L;
}
if(post==L->last)
{
last++;
L->data[last]=d;
return L;
}
else
{
for(int i=L->last;i<=post;i--)
{
L->data[i+1]=L->data[i];
}
L->data[post]=d;
L->last++;
}
return L;
}
(6)、删除值为i的元素
SeqList* deletei(SeqList L,int i)
{
if(L->list==-1)
{
printf("NULL LIST");
return L;
}
int post=int Locate_SeqList(L,i);
for(int j=post;j<L->last;j++)
{
L->data[j]=L->data[j+1];
}
L->last--;
return L;
}//(按位置删除同理)