数据结构课本上的所有的关于顺序表的所有的算法总结。
代码如下:
#include<stdio.h>
#define MAX 100
typedef int datatype;
typedef struct
{
datatype a[MAX];
int size;
}sequence_list;
void init(sequence_list *L)
{
L->size=0;
}
void append(sequence_list *L,datatype x)
{
if(L->size==MAX)
{
printf("循序表是满的。");
return;
}
L->a[L->size]=x;
L->size++;
}
void display(sequence_list L)
{
int i;
if(L.size==0)
{
printf("顺序表是空的。");
return;
}
for(i=0;i<L.size;i++)
printf("%5d",L.a[i]);
}
int empty(sequence_list L)
{
return (L.size==0 ?1:0);
}
int find(sequence_list L,datatype x)
{
int i=0;
while(i<L.size&&L.a[i]!=x)
i++;
return i<L.size ? 1 : -1;
}
datatype get(sequence_list L,int i)
{
if(i<0||i>=L.size)
{
printf("顺序表中没有指定的数据。");
return;
}
return L.a[i];
}
void insert(sequence_list *L,datatype x,int pos)
{
int i;
if(L->size==MAX)
{
printf("顺序表满了。");
return;
}
if(pos<0||pos>L->size)
{
printf("指定的位置不存在。");
return;
}
for(i=L->size;i>pos;i--)
{
L->a[i]=L->a[i-1];
}
L->a[pos]=x;
L->size++;
}
void del(sequence_list *L,int pos)
{
int i;
if(L->size==0)
{
printf("顺序表是空的。\n");
return;
}
if(pos<0|| pos >= L->size)
{
printf("删除的位置不存在。\n");
return;
}
for(i=pos;i<L->size;i++)
{
L->a[i]=L->a[i+1];
}
L->size--;
}
int main()
{
sequence_list L;
datatype x,a=1;
int pos,n;
while(a)
{
printf("\n\t\t 顺序表展示\n");
printf("**********************************************\n");
printf("* 1:初始化; 2:判断是否为空 *\n");
printf("* 3:在末尾插入一个数 4:在指定的位置插入 *\n");
printf("* 5:得到制定的数据 6:输出顺序表 *\n");
printf("* 7:删除指定位置数据 0:退出 *\n");
printf("***********************************************\n");
//**********************************************
//* 1:初始化; 2:判断是否为空 *
//* 3:在末尾插入一个数 4:在指定的位置插入 *
//* 5:得到制定的数据 6:输出顺序表 *
//* 7:删除指定位置数据 0:退出 *
//***********************************************
scanf("%d",&a);
switch(a)
{
case 1: init(&L);printf("操作完成!请继续!\n\n\n");break;
case 2:
{
n=empty(L);
if(n==1)
{
printf("顺序表是空的!\n\n\n");
printf("操作完成!请继续!\n\n\n");
break;
}
else
{
printf("顺序表不是空的!\n\n\n");
printf("操作完成!请继续!\n\n\n");
break;
}
break;
}
case 3:
{
printf("请输入插入的数:");
scanf("%d",&x);
append(&L,x);
printf("操作完成!请继续!\n\n\n");
break;
}
case 4:
{
printf("请输入插入的数:");
scanf("%d",&x);
printf("请输入插入的位置:");
scanf("%d",&pos);
insert(&L,x,pos-1);
printf("操作完成!请继续!\n\n\n");
break;
}
case 5:
{
printf("请输入指定的位置:");
scanf("%d",&x);
printf("第%d位置的数据是:%d。\n",x,get(L,x-1));
printf("操作完成!请继续!\n\n\n");
break;
}
case 6:
{
display(L);
printf("\n\n操作完成!请继续!\n\n\n");
break;
}
case 7:
{
printf("请输入要删除的位置:");
scanf("%d",&pos);
del(&L,(pos-1));
printf("操作完成!请继续!\n\n\n");
break;
}
case 0: printf("本次测试结束!\n");
}
printf("---------------------------------------------------\n\n");
}
return 0;
}