#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 100 //定义常量MAXLEN为10表示存储空间总量
typedef int DataType; //定义DataType为int类型
typedef struct //顺序表存储类型
{ DataType data[MAXLEN]; //存放线性表的数组
int Length; //Length 顺序表长度
}Seqlist;
void InitList(Seqlist *L)
{
L->Length=0; /*初始化顺序表为空*/
};
void CreateList(Seqlist *L,int n) /*建立顺序表并输入多个元素函数*/
{ int i;
printf("请输入和%d个整数:",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]) ;
L->Length=i; //设线性表的长度为i
}
int GetElem(Seqlist *L,int i,DataType *x) //按顺序查找,,获取顺序表中第i位元素
{ if(i<1||i>L->Length) // 当查找位置i不正确时;
return 0;
else
{
*x=L->data[i-1]; //将顺序表中第i个元素赋给指针x 所指变量
return 1;
}
}
int Locate(Seqlist *L,DataType x) //按值查找,,在顺序表L中定位元素x函数
{ int i=0;
while(i<L->Length&&L->data[i]!=x)
i++;
if(i>=L->Length)
return 0;
else
return i+1;
}
int InsElem(Seqlist *L,int i,DataType x) //在顺序表中第i位插入元素x
{ int j;
if(L->Length>=MAXLEN)
{ printf("顺序表已满!");
return -1;
}
if(i<1||i>L->Length+1)
{
printf("插入位置出错!");
return 0;
}
if(i==L->Length+1) //插入的位置为表尾,不需要移动直接插入
{ L->data[i-1]=x;
L->Length++;
return 1;
}
for(j=L->Length-1;j>=i-1;j--) //插入表中某位置,插入点后各结点向后移
{ L->data[j+1]=L->data[j];
L->data[i-1]=x; //插入元素x
L->Length++; //顺序表长度+1
return 1;
}
}
int DelElem(Seqlist *L,int i,DataType *x) //在顺序表中删除第i位元素
{ int j;
if(L->Length==0)
{
printf("顺序表为空!");
return 0;
}
if(i<1||i>L->Length)
{
printf("不存在第i个元素");
return 0;
}
*x=L->data[i-1];
for(j=i;j<L->Length;j++)
{
L->data[j-1]=L->data[j];
L->Length--;
return 1;
}
}
void DispList(Seqlist *L)//显示输出顺序表L中的每一个元素函数
{
int i;
for(i=0;i<L->Length;i++)
{
printf("%5d",L->data[i]);
}
}
void Menu()
{
printf("\n 顺序表的各种操作");
printf("\n================================================================");
printf("\n 1------建立顺序表");
printf("\n 2------插入元素 ");
printf("\n 3------删除元素") ;
printf("\n 4------按位置查找元素");
printf("\n 5------按元素值查找其在其中的位置");
printf("\n 6------求顺序表的长度");
printf("\n 0-------返回");
printf("\n=================================================================");
printf("\n 请输入菜单号(0~6)");
}
void main()
{
Seqlist L;
DataType x;
int n,i,loc;
char ch1,ch2,a;
ch1='y';
while(ch1=='y'||ch1=='Y')
{
Menu();
scanf("%c",&ch2);
getchar();
switch(ch2)
{
case '1':
InitList(&L) ;
printf("将输入建立线性表的个数");
scanf("%d",&n);
CreateList(&L,n);
printf("建立的线性表为:");
DispList(&L);
break;
case '2':
printf("请输入要插入的位置");
scanf("%d",&i);
printf("请上输入要插入的元素值:");
scanf("%d",&x);
if(InsElem(&L,i,x))
{
printf("已成功在%d的位置上插入%d,插入后的线性表为:\n",i,x);
DispList(&L);
}
else
printf("输入插入的参数错误!");
break;
case'3':
printf("请输入删除元素的位置");
scanf("%d",&i);
if(DelElem(&L,i,&x))
{
printf("已成功在%d的位置上删除%d,删除后的线性表为:\n",i,x);
DispList(&L);
}
else
printf("输入删除的参数错误");
break;
case'4':
printf("请输入要查看表中元素位置(从1开始)");
scanf("%d",&i);
if(GetElem(&L,i,&x))
printf("当前线性表第%d的位置为:%d",i,x);
else
printf("输入的位置错误");
break;
case'5':
printf("请输入要查找的元素值为:");
scanf("%d",&x);
loc=Locate(&L,x);
if(loc)
printf("查找元素为%d的位置为:%d",x,loc);
else
printf("该表中无此元素!");
break;
case'6':
printf("当前线性表的长度为:%d",L.Length);
break;
case'0':
ch1='n';
break;
default:
printf("输入有误,请输入0~6进行选择");
}
if(ch2!='0')
{
printf("\n按回车键继续,按任意键返回主菜单!\n");
a=getchar();
if(a!='\xA')
{
getchar();
ch1='n';
}
}
}
}
求代佬指点 代码如上 使用插入和删除功能时出现 如图的错误 看书上自己调试的找不出问题