#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ListSize 100
typedef int DataType;
typedef struct
{
DataType data[ListSize];
int length;
}Seqlist;
void InsertList(Seqlist *L,DataType x,int i)//插入
{/*将新结点x插入L所指的顺序表的第i个结点的位置(data[i-1])*/
int j;
if(i<1||i>L->length+1)
{
printf("位置非法,退出运行!");
exit(0);
}
if(L->length>=ListSize)
{
printf("表空间溢出,退出运行");
exit(0);
}
for(j=L->length-1;j>=i-1;j--)//从第i个结点开始后移
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->length++;
}
void DeleteList(Seqlist *L,int i)//删除
{/*删除第i个位置的结点*/
int j;
if(i<1||i>L->length)
{
printf("位置非法,退出运行!");
exit(0);
}
for(j=i;j<L->length;j++)//从第i个结点开始前移
L->data[j-1]=L->data[j];
L->length--;
}
int Locallist(Seqlist *L,int x)//查找
{/* 在顺序表中从前往后查找第一个值等于x的结点。若找到则回传该结点序号
否则回传0 */
int i=1;
while((i<=L->length)&&(L->data[i-1]!=x))/*注意:第i个结点在data[i-1]*/
i++;/*从前往后查找*/
if(i<=L->length) return(i);
else return(0);
}
void Display(Seqlist *L)//显示表的内容
{
system("CLS");//清屏
printf("/n顺序表的内容为:/n/n");
printf("表长为:%d/n",L->length);//表长为L->length
int n;
printf("表中的元素为:/n");
for(n=0;n<L->length;n++)
{
printf("%d ",L->data[n]);
}
printf("/n");
}
void show()
{
printf("/n");
printf("/n----------------------------/n");
printf("请输入要对顺序表的操作:/n");
printf("1、向顺序表中插入元素/n");
printf("2、在顺序表中查找元素/n");
printf("3、删除表中确定位置的元素/n");
printf("4、输出表中确定位置的元素/n");
printf("5、输出顺序表/n");
printf("6、退出程序/n");
printf("----------------------------/n/n");
}
void main()
{
Seqlist *L;
int i,n,t,e;
int choice;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->length=0;
printf("初始化顺序表/n/n");
printf("-请输入顺序表的长度:/n");
scanf("%d",&n);
printf("-请为顺序表输入元素:/n");
for(i=1;i<=n;i++)
{
scanf("%d",&t);
InsertList(L,t,i);
}
Display(L);
loop:
show();
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入数据:/n");
scanf("%d",&t);
printf("请在表长范围内输入/n要将此数插入的位置:/n");
scanf("%d",&i);
InsertList(L,t,i);
break;
case 2:
printf("请输入要查找元素:/n");
scanf("%d",&e);
i=Locallist(L,e);
if(i==0)
printf("元素%d未找到",e);
else
printf("元素“ %d ”的位置为:%d",e,i);
break;
case 3:
printf("请输入要删除的位置:/n");
scanf("%d",&i);
DeleteList(L,i);
break;
case 4:
printf("请输入读取顺序表元素的位置:/n");
scanf("%d",&i);
printf("%d",L->data[i-1]);
break;
case 5:
printf("/n顺序表的内容为:/n/n");
Display(L);
break;
case 6:
exit(0);
break;
default:
printf("/n输入错误,请重新输入/n");
break;
}
goto loop;//无条件跳转语句
}