追风少年zsk 2021-04-17 22:38 采纳率: 100%
浏览 41
已采纳

这段代码 插入函数和删除函数有问题?

代码如下

/**
C语言实现顺序表的各种基本操作
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int status;
typedef int ElemType;
#define MAXSIZE 100
#define OK 0
#define ERROR -1
typedef struct{
	ElemType *elem;
	int length;
}SqList;
status InitList(SqList &L){
	//构造一个空的顺序表(初始化顺序表)
	L.elem=(ElemType*)malloc(sizeof(ElemType)*100);
	//使用malloc()函数给顺序表分配一个MAXSIZE大小的数组空间
	if(!L.elem){
		printf("存储分配失败\n");
		return ERROR;
	}
	L.length=0;
	return OK;
}
status GetElem(SqList &L,int i,ElemType &e){
	//顺序表的存值操作
	if(i<1||i>L.length){
		printf("i取值不合理\n");
		return ERROR;
	}
	e=L.elem[i-1];//elem[i-1]单元存储第i个元素
	return OK;
}
status LocateElem(SqList &L, ElemType e ){
	//查找操作: 在顺序表L中查找值为e的元素 返回它的序号,如果找不到,返回一个ERROR错误信息
	int i;
	for(i=0;i<L.length;i++){
		if(e==L.elem[i]){
			printf("你想要的查找的值是顺序表中的第%d个元素\n",i+1); 
			return OK;
		}else{
			printf("查找错误,顺序表中没有这个数据\n");
			return ERROR;
		}
	}
}
status ListInsert(SqList &L,int i,ElemType e){
	//顺序表的插入操作: 在顺序表第i个位置插入元素e
	if(i<1||i>L.length+1){// i值的合法取值范围是(1<=i<=L.length+1)
		printf("插入失败,i值不合法\n");
		return ERROR;
	}
	if(L.length==MAXSIZE){
		printf("插入失败,当前存储空间已满\n");
		return ERROR;
	}
	for(int j=L.length+1;j>=i-1;j--){
		L.elem[j+1]=L.elem[j];//插入元素之后的所有元素位置后移一位
		L.elem[i-1]=e;//将新元素e放入i这个位置
		++L.length;//表长加1
		return OK;
	/*ElemType *p=L.elem+i-1,*q=L.elem+L.length-1;
	for(q;q>=p;q--){
		*(q+1)=*q;//移动元素 
		*p=e;
		L.length++;
		return OK;*/
	}
}
status ListDelete(SqList &L,int i){
	//删除操作:在顺序表L中删除第i个元素
	if(i<1||i>L.length){//i的取值范围是1<=i<=L.length+1
		printf("i取值不合理\n");
		return ERROR;
	}
	for(int j=i;j<=L.length-1;j++){
		L.elem[j-1]=L.elem[j];//被删除元素之后的所有元素位置前移一位
		--L.length;//表长减1
		return OK;
	}
}
void CreateList(SqList &L,int n){
	printf("请输入%d个整数(以空格间隔开来:)\n",n);
	for(int i=0;i<5;i++){
		int num;
		scanf("%d",&num);
		L.elem[i]=num;
		L.length++;
	}
}
void DispalyList(SqList &L){//输出顺序表
	printf("新的顺序表的是这样的:\n");
	for(int i=0;i<=L.length-1;i++){
		printf("%d ",L.elem[i]);
	}
	printf("\n");
}
int main(){
	SqList L;
	InitList(L);//初始化顺序表

	CreateList(L,5);//给顺序表赋值
	DispalyList(L);

	ListInsert(L,2,10);//插入元素
	DispalyList(L);

	ListDelete(L,2);//删除元素
	DispalyList(L);

	GetElem(L,1,L.elem[1]);//存储元素
	DispalyList(L);

	LocateElem(L,1);//查找元素,返回序号

	system("pause");
	return 0;
}
  • 写回答

4条回答 默认 最新

  • 关注

    最好的办法是在函数内部写一些打印语句,看看输出的过程,你就会发现问题的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序