然后手动实现了一个线性表的小程序。
主要功能就是生成、插入、删除、查询。
首先,线性表就是一段连续储存的线性空间,是一种数据结构。和数组一样。
然后线性表常数时间找第i个数,删除的复杂度是o(n)(大概。。。我自己是那么感觉的)。
typedef int ElemType;
typedef struct{
ElemType a[MAXSIZE];
int length;
}SqList;
SqList就是一个线性表了。
void creat_list(SqList * L)
{
int i;
printf("\n n=?");
scanf("%d",&L->length);
for(i=0;i<L->length;i++)
{
printf("\n data %d=?",i);
scanf("%d",&(L->a[i]));
}
}
void insert_sq(SqList *L,int i,ElemType e){
int j;
if(L->length==MAXSIZE)
printf("\n overflow!");
else if(i<1||i>L->length+1)
printf("\n erro e i!");
else{
for(j=L->length-1;j>=i-1;j--)
L->a[j+1]=L->a[j];
L->a[i-1]=e;
L->length++;
}
}
ElemType delete_sq(SqList *L,int i){
ElemType x;int j;
if(L->length==0)
printf("\n 是空表。underflow!");
else if(i<1||i>L->length){
printf("\n error i !" );
x-=1;
}
else{
x=L->a[i-1];
for(j=i;j<=L->length-1;j++)
L->a[j-1]=L->a[j];
L->length--;
}
return x;
}
int locat_sq(SqList L,ElemType e){
int i=0;
while(i<=L.length-1&&L.a[i]!=e)
i++;
if(i<=L.length-1)
return i+1;
else
return -1;
}
void out_list(SqList L){
int i;char ch;
printf("\n");
for(int i=0;i<=L.length-1;i++)
printf("%10d",L.a[i]);
printf("\n\n 按Enter键,继续");
ch=getchar();ch=getchar();
}
然后附上主函数
#include
#include
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
ElemType a[MAXSIZE];
int length;
}SqList;
void creat_list(SqList *L);
void out_list(SqList L);
void insert_sq(SqList *L,int i,ElemType e);
ElemType delete_sq(SqList *L,int i);
int locat_sq(SqList L,ElemType e);
SqList a;
int main(int argc, char *argv[])
{
int i,k,loc;
ElemType e,x;
char ch;
do{
printf("\n\n\n");
printf("\n 1.建立线性表 ");
printf("\n 2.在i位置插入元素 ");
printf("\n 3.删除第i个元素,返回其值 ");
printf("\n 4.查找值为e的元素 ");
printf("\n 6.结束程序运行 ");
printf("\n======================================");
printf("\n 请输入您的选择(1,2,3,4,6)");
scanf("%d",&k);
switch(k)
{
case 1:{
creat_list(&a);
out_list(a);
}break;
case 2:{
printf("\n i,e=?");
scanf("%d,%d",&i,&e);
insert_sq(&a,i,e);
out_list(a);
}break;
case 3:{
printf("\n i=?");
scanf("%d",&i);
x=delete_sq(&a,i);
out_list(a);
printf("\n x=%d",x);
}break;
case 4:{
printf("\n e=?");
scanf("%d",&e);
loc=locat_sq(a,e);
if(loc==-1)
printf("\n未找到 %d",loc);
else
printf("\n已找到,元素位置是 %d",loc);
}break;
}
}while(k!=6);
printf("\n");
printf("\n");
ch=getchar();ch=getchar();
return 0;
}