# include<stdio.h>
# define Maxsize 100
# define OK 1
# define ERROR 0
typedef struct
{
int elem[Maxsize];
int last;
}SeqList;
SeqList Create(SeqList L)
{
for(int i=0;i<L.last;i++)
scanf(“%d”,&L.elem[i]);
return L;
}
void visit(SeqList L)
{
for(int i=0;i<L.last;i++)
printf(“%d\t”,L.elem[i]);
}
int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1)||(i>L->last+2))
{
printf(“插入位置i值不合法”);
return (ERROR);
}
for(k=L->last;k>=i-1;k++)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
visit(*L);
return (OK);
}
int main()
{
SeqList L1;
L1.last=5;
L1=Create(L1);
visit(L1);
int i=InsList(&L1,3,3);
}
这个代码哪里出现问题啦
# define Maxsize 100
# define OK 1
# define ERROR 0
typedef struct
{
int elem[Maxsize];
int last;
}SeqList;
SeqList Create(SeqList L)
{
for(int i=0;i<L.last;i++)
scanf(“%d”,&L.elem[i]);
return L;
}
void visit(SeqList L)
{
for(int i=0;i<L.last;i++)
printf(“%d\t”,L.elem[i]);
}
int InsList(SeqList *L,int i,int e)
{
int k;
if((i<1)||(i>L->last+2))
{
printf(“插入位置i值不合法”);
return (ERROR);
}
for(k=L->last;k>=i-1;k++)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
visit(*L);
return (OK);
}
int main()
{
SeqList L1;
L1.last=5;
L1=Create(L1);
visit(L1);
int i=InsList(&L1,3,3);
}
这个代码哪里出现问题啦
解决方案
20
# include<stdio.h> # define Maxsize 100 # define OK 1 # define ERROR 0 typedef struct { int elem[Maxsize]; int last; }SeqList; //1. last为顺序表长度 SeqList Create(SeqList L) //2. 这里你用的是传值的方式,并不会修改你传入对象的状态,建议使用传引用的方式 { //3. 你这里的意思看起来是想对静态表做初始化 for(int i=0;i<L.last;i++) scanf("%d",&L.elem[i]); return L;//假如非要这样返回也能接受,但并科学 } void visit(SeqList L) { for(int i=0;i<L.last;i++) printf("%d\t",L.elem[i]); printf("\n"); } int InsList(SeqList *L,int i,int e) { int k; // 条件应改成:if( i < 0 || i > 5) //if((i<1)||(i>L->last+2)) if( i < 0 || i > 5) { printf("插入位置i值不合法"); return (ERROR); } //移动条件有问题 //for(k=L->last;k>=i-1;k++) // L->elem[k+1]=L->elem[k]; for(k = L->last; k > i; -- k) { L->elem[k] = L->elem[k-1]; } L->elem[i]=e; L->last++; visit(*L); return (OK); } int main() { SeqList L1; L1.last=5; L1=Create(L1); visit(L1); int i=InsList(&L1,5,3); }
40
for(k=L->last;k>=i-1;k++)
这里是滞应该是 k–
这里是滞应该是 k–