题目:
将顺序表的基本算法(如初始化、求长度、插入、删除、输出等)汇总在一起,用一个完整的程序实现顺序表的基本运算,并且编写顺序表的判空、判满等基本运算的算法。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 1024
typedef int elemtype;
typedef struct
{ elemtype data[MAXSIZE];
int last;
}SequenList;
void Init_SequenList(SequenList *L)
{ if(L!=NULL)
{ L->last=-1;
}
}
void Create_SequenList(SequenList *L)
{
printf("请输入顺序表元素个数:\n");
scanf("%d",&L->last);
printf("请输入顺序表元素:\n");
for (int i=0;i<L->last;i++){
scanf("%d",&L->data[i]);
}
printf("创建顺序表成功!");
}
elemtype Length_SequenList (SequenList *L)
{
return (L->last+1);
}
elemtype Insert_SequenList(SequenList *L,elemtype x,int i)
{
int j;
if(L->last>=MAXSIZE-1)
{
return 0;
}
if(i<1||i>L->last+2)
{
return -1;
}
for(j=L->last;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=x;
L->last=L->last+1;
return 1;
}
elemtype Delete_SequenList(SequenList *L,int i)
{
int j;
if (i<1||i>L->last+1)
{
return 0;
}
else
{
for(j=i;j<=L->last;j++)
{
L->data[j-1]=L->data[j];
}
L->last--;
}
return 1;
}
elemtype GetData_SequenList(SequenList *L,int i)
{
if(i<1||i>L->last+1)
{
return 0;
}
else{
return(L->data[i-1]);
}
}
elemtype Search_SequenList(SequenList *L,elemtype key)
{
int i;
for(i=0;i<=L->last;i++)
{
if(L->data[i]==key)
{
return(i+1);
}
}
return 0;
}
elemtype Print_SequenList(SequenList *L)
{
int i;
if(L->last==0)
{
return 0;
}
for(i=0;i<L->last;i++)
{
printf("L[%d]=%d\t",i+1,L->data[i]);
if((i+1)%5==0)
{
printf("\n");
}
}
return 1;
}
elemtype IsEmpty_SequenList(SequenList *L)
{
if (L->last==0)
{
return 0;
}
else
{
return 1;
}
}
elemtype IsFull_SequenList(SequenList *L)
{
if (L->last<=MAXSIZE && L->last>=0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
SequenList *L;
int n,data,position;
elemtype e;
L=(SequenList*) malloc (sizeof(SequenList));
printf("—————顺序表的基本操作\n");
printf(" 1.初始化\n");
printf(" 2.求长度\n");
printf(" 3.插入\n");
printf(" 4.删除\n");
printf(" 5.输出\n");
printf(" 6.查找数据(根据位置)\n");
printf(" 7.查找位置(根据数据)\n");
printf(" 8.判空\n");
printf(" 9.判满\n");
printf(" 0.退出\n");
while(1)
{
printf("\n");
printf("请输入您的选择:");
scanf("%d",&n);
switch(n){
case 1:
Init_SequenList(L);
Create_SequenList(L);
break;
case 2:
int length;
length=Length_SequenList(L);
printf("顺序表的长度为:%d",length);
break;
case 3:
printf("请输入插入的数据和要插入的位置:");
scanf("%d %d",&data,&position);
Insert_SequenList(L,data,position);
printf("插入成功!");
break;
case 4:
printf("请输入要删除的数据在顺序表中的位置:");
scanf("%d",&position);
Delete_SequenList(L,position);
printf("删除成功!");
break;
case 5:
printf("输出的顺序表为:\n");
Print_SequenList(L);
break;
case 6:
printf("请输入要查找的位置:");
scanf("%d",&position);
e=GetData_SequenList(L,position);
printf("根据输入的位置查找到在顺序表中的数据为:%d",e);
break;
case 7:
printf("请输入要查找的数据:");
scanf("%d",&data);
e=Search_SequenList(L,data);
printf("根据输入的数据查找到在顺序表中的位置为:%d",e);
break;
case 8:
if (IsEmpty_SequenList(L))
{
printf("顺序表不为空!");
}
else
{
printf("顺序表为空!请初始化顺序表!");
}
break;
case 9:
if (IsFull_SequenList(L))
{
printf("顺序表未满!");
}
else
{
printf("顺序表已满!不能再插入数据!");
}
break;
case 0:
break;
default:
printf("选项不合法\n");
break;
}
}
}