#include<stdio.h>
#include<stdbool.h>//c语言引用bool类型
#define Maxsize 20
typedef struct{
int data[Maxsize];
int length;
}SeqList;
/*定义一个动态顺序表,动态顺序表并不是说可以动态加载,他只是会在数据结构占满时,开辟一一块更大的存储空间,达到替换的目的
#define Initsize 100;
typedef struct{
Elemtypedef *data;
int length,Maxsize;
}
*/
void init(SeqList *L)
{
int a;
(*L).length=0;
scanf("%d",&a);
int i=0;
while(a!=999)
{
(*L).data[i]=a;
i++;
scanf("%d",&a);
(*L).length+=1;
}
}
//在顺序表的第i个位置插入新元素e
bool Insert(SeqList *L,int i,int e)
{
if(i<1||i>(*L).length+1)
return false;
if((*L).length>=Maxsize)
return false;
int j=(*L).length;
//逻辑上从1开始,但实际存储时从a[0]开始
while(j>=i-1)
{
int k=j+1;
(*L).data[k]=(*L).data[j];
j--;
}
(*L).data[i-1]=e;
(*L).length++;
return true;
}
//删除表中第i个位置的元素,用引用变量e返回
bool delete(SeqList *L,int i,int *e)
{
if(i<1||i>(*L).length+1)
return false;
*e=(*L).data[i-1];
int j=i;
while(j>=i&&j<=(*L).length)
{
(*L).data[j-1]=(*L).data[j];
j++;
}
(*L).length--;
return true;
}
//在顺序表中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SeqList L,int e)
{
int i=0;
while(i<=L.length)
{
if(L.data[i]==e)
return i+1;
i++;
}
return 0;
}
bool printlist(SeqList L){
if (L.length==0)
return false;
int i=0;
while(i<L.length)
{
printf("%d ",L.data[i]);
i++;
}
printf("\n");
return true;
}
int main()
{
SeqList L;
printf("请输入待处理的顺序表,以“1 2 3”输入,结束时输入999");
init(&L);
printlist(L);
Insert(&L,3,15);
printlist(L);
int e;
delete(&L,5,&e);
printlist(L);
int d=LocateElem(L,5);
printf("%d",d);
return 0;
}
顺序表的C语言实现
最新推荐文章于 2024-06-19 19:35:44 发布