#为什么DisPlay函数无法输出内容?
代码如下
#include "stdio.h"
#define MAXSIZE 100
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE];//静态申请
int last;
}SepList;
void InitLength(SepList *L)//将L初始化为空表
{
L->last=-1;
}
void Visit(SepList *L)//访问顺序表
{
int i;
if (L->last==-1) printf("Empty.\n");
else
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
printf("\n");
}
int InsList(SepList *L,int i,ElemType e)//顺序表的插入运算
{
int k;
if((i<1)||(i>L->last+2))//在顺序表L中第i个数据元素之前插入一个元素e。i的合法取值范围是1≤i≤L->last+2。
{
printf("插入位置i值不合法");
return (ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return (ERROR);
}
for(k=L->last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return (OK);
}
}
int DelList(SepList *L,int i,ElemType *e)//顺序表的删除运算
{ //在顺序表中删除第i个数据元素,并用指针参数e返回其值
int k;
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法!");
return (ERROR);
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
L->elem[k-1]=L->elem[k];//将后面的元素依次前移
L->last--;
return (OK);
}
void mergeList(SepList *LA,SepList *LB,SepList *LC)//线性表的合并运算
{
int i,j,k,l;
i=0;j=0;k=0;
while(i<=LA->last&&j<=LB->last)
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]=LA->elem[i];
i++;
k++;
}
else
{
LC->elem[k]=LB->elem[j];
j++;
k++;
}
while(i<=LA->last)//当表A有剩余元素时,则将表LA余下的元素赋值给表LC
{
LC->elem[k]=LA->elem[i];
i++;
k++;
}
while(i<=LB->last)//同理
{
LC->elem[k]=LB->elem[j];
j++;
k++;
}
LC->last=LA->last+LB->last;
}
int ListLength(SepList *L)//求线性表的长度
{
return L->last+1;
}
int TransList(SepList *L)//线性表的逆置
{
int i=0;
int temp;
for(i=0;i<(L->last+1)/2;i++)
{
temp=L->elem[i];
L->elem[i]=L->elem[L->last-i];
L->elem[L->last-i]=temp;
}
return (OK);
}
void SortList(SepList *L)//将线性表的值按从小到大排列
{
int i,j,temp,max;
for(i=0;ilast;i++)
{
max=i;
for(j=i;jlast+1;j++)
{
if(L->elem[max]>L->elem[j])
max=j;
}
temp=L->elem[i];
L->elem[i]=L->elem[max];
L->elem[max]=temp;
}
}
int DisPlay(SepList *L)//输出线性表中的元素
{
int i;
printf("顺序表中的元素为:");
for(i=0;ilast+1;i++)
{
printf("%d\n",L->elem[i]);
}
printf("\n");
return (OK);
}
int main()
{
SepList L1,L2,L3;
InitLength(&L1);InitLength(&L2);InitLength(&L3);
int choose,n1,n2,i;
int *e;
for(i=0;i<10;i++)
{
printf("***********************************\n");
printf("* 菜单 *\n");
printf("* 1:插入 2:删除 *\n");
printf("* 3:非递减排列 4:逆置 *\n");
printf("* 5:求表长 6:合并 *\n");
printf("* 7:访问表 8:删除 *\n");
printf("* 9:输出表 *\n");
printf("***********************************\n");
printf("输入想要进行操作的序号:");
scanf("%d",&choose);
if(choose==1)
{
printf("请输入想在L1表中插入元素的个数:");
scanf("%d",&n1);
printf("请依次输入L1表中要存储的元素:");
for(i=1;i<=n1;i++)
{
scanf("%d",&L1.elem[i]);
InsList(&L1,1,L1.elem[i]);
}
DisPlay(&L1);
printf("请输入想在L2表中插入元素的个数:");
scanf("%d",&n2);
printf("请依次输入L2表中要存储的元素:");
for(i=1;i<=n2;i++)
{
scanf("%d",&L2.elem[i]);
InsList(&L2,1,L2.elem[i]);
}
DisPlay(&L2);
}
if(choose==2)
{
printf("请输入想在L1表中删除的元素的个数:");
scanf("%d",&n1);
printf("请依次输入L1表中删除元素的下标:");
for(i=0;i<=n1;i++)
{
scanf("%d",&i);
DelList(&L1,i,e);
}
printf("请输入想在L2表中删除的元素的个数:");
scanf("%d",&n2);
printf("请依次输入L2表中删除元素的下标:");
for(i=0;i<=n2;i++)
{
scanf("%d",&i);
DelList(&L2,i,e);
}
}
if(choose==3)
{
SortList(&L1);
SortList(&L2);
}
}
}
int InsList(SepList *L,int i,ElemType e)//顺序表的插入运算
{
int k;
if((i<1)||(i>L->last+2))//在顺序表L中第i个数据元素之前插入一个元素e。i的合法取值范围是1≤i≤L->last+2。
{
printf("插入位置i值不合法");
return (ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return (ERROR);
}
for(k=L->last;k>=i-1;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;
L->last++;
return (OK);
}