Code Bye

数据结构线表插入问题

# 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);
}
这个代码哪里出现问题啦
解决方案

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–

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据结构线表插入问题