lyworry 2017-10-01 08:10 采纳率: 0%
浏览 1050

C语言定义了一个结构体,做数组的增删查,但是定义的length明明是0,一调用init就变成1

#include
#include
#include
#define MaxSize 100
#define SUCCESS 1
#define FAILED 0
#define OVERFLOW 1
typedef int status;
typedef int type;
typedef struct{
type *elem;
int length;
}SqList;
status init(SqList L);
status getElem(SqList L,int i,type &elem);
status selectElem(SqList L,type elem,int &location);
status insertElem(SqList &L,int location,type elem);
status delElem(SqList &L,int location);
int main(){
SqList L;
int operation;
int location;
type elem;
printf("------顺序表的操作------\n");
printf("------1、顺序表的初始化------\n");
printf("------2、顺序表的取值------\n");
printf("------3、顺序表的查找------\n");
printf("------4、顺序表的插入------\n");
printf("------5、顺序表的删除------\n");
printf("------6、退出------\n");
while(true){
printf("%d\n",operation);
printf("请输入操作:\n");
scanf("%d",&operation);
switch(operation){
case 1:if(init(L)==0)
printf("初始化失败\n");
else printf("初始化成功\n");
printf("%d",L.length);
break;
case 2:
printf("请输入要查找的位置:\n");
scanf("%d",&location);
if(getElem(L,location,elem)==1)
printf("第%d个位置上的值为:%d\n",location,elem);
break;
case 3:printf("请输入要查找的值:\n");
scanf("%d\n",&elem);
if(selectElem(L,elem,location)==1)
printf("%的位置在%个",elem,location);
break;
case 4:
printf("请输入要插入的位置以及值:\n");
scanf("%d%d",&location,&elem);
if(insertElem(L,location,elem)==1)
printf("插入成功\n");
break;
case 5:
printf("请输入要删除的值的位置:\n");
scanf("%d",&location);
if(delElem(L,location)==1)
printf("删除成功\n");
break;
}

}
return 0;
}
status init(SqList L){//初始化
L.elem=new type[MaxSize];
if(!L.elem){
exit(OVERFLOW);
}
L.length=0;
L.elem[0]=2;
return SUCCESS;
}
status getElem(SqList L,int location,type &elem){//获取元素 location要查找的位置 elem返回查找到的值
if(location>L.length||location<1){
printf("超出查找范围\n");
return FAILED;
}
else{
elem=L.elem[location];
return SUCCESS;
}
}
status selectElem(SqList L,type elem,int &location){//查找元素 elem要查找的元素 location查找元素的位置
for(int i=0;i<L.length-1;i++) {
if(L.elem[i]==elem)
location=i+1;
return SUCCESS;
}
printf("没有找到你要找的值\n");
return FAILED;

}
status insertElem(SqList &L,int location,type elem){//插入元素
if(locationL.length+1||location==MaxSize){
printf("插入的位置超出范围\n");
return FAILED;
}
if(L.length==0){
L.elem[0]=elem;
L.length++;
return SUCCESS;
}
for(int i=L.length-1;i>location;i--){
L.elem[i+1]=L.elem[i];
L.elem[location-1]=elem;
}
L.length++;
printf("%d",L.length);
return SUCCESS;
}
status delElem(SqList &L,int location){//删除元素
if(locationL.length){
printf("删除元素的位置超出范围\n");
return FAILED;

}
for(int i=location-1;i<L.length-1;i++){
L.elem[i]=L.elem[i+1];
L.length--;
return SUCCESS;
}
}

  • 写回答

3条回答 默认 最新

  • littlebabyyoung 2017-10-01 09:18
    关注

    建议你用debug模式监视该结构体的某个实例,初始化没有错的话,看看是什么时候变成1的

    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services