jc_wt_thu 2021-11-30 23:55 采纳率: 100%
浏览 83
已结题

《c语言数据结构线性表》

数据结构顺序表

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;
#define MAXSIZE 100
#define OK 1
#define ERROR 0

typedef struct {
 ElemType *data;
 int length;
}Sqlist;

typedef int Status;

Status InitList (Sqlist *L){
 L->data=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
 if(L->data==NULL){
  return ERROR;
 }
 L->length=0;
 return OK;
}

Status DestroyList(Sqlist *L){
 if(L->data==NULL){
  return ERROR;
 }
 free(L->data);
 L->length=0;
 return OK;
}
Status GetLength(Sqlist *L,int *len){
 if(L->data==NULL){
  return ERROR;
 }
 *len=L->length;
 return OK;
}

Status IsEmpty(Sqlist *L,int *emp){
 if(L->data==NULL){
  return ERROR;
 }
 *emp=(L->length==0);
 return OK;
}

Status Insert(Sqlist *L,int i,ElemType e){
 int index=i-1;
 int p=L->length-1;
 if(L->data==NULL){
  return ERROR;
 }
 if(index<0||index>L->length){
  return ERROR;
 }
 
 for(;p>=index;p--){
  L->data[p+1]=L->data[p];
 }
 L->data[index]=e;
 L->length++;
 return OK;
}
//有问题 
Status Delete(Sqlist *L,int i,ElemType *elem){
    if(L->data==NULL){
        return ERROR;
    }
    if(i<1||i>L->length){
        return ERROR;
    }
    
    *elem=L->data[i-1];//segementation fault
    if(i<L->length){
        for(int j=i-1;j<L->length-1;j++){
            L->data[j]=L->data[j+1];
        }
    } 
 
    L->length--;
    return OK;
}

Status GetData(Sqlist *L,int i,int *elem){
 if(L->data==NULL){
  return ERROR;
 }
 if(i<0||i>L->length){
  return ERROR;
 }
 *elem=L->data[i-1];//segmentation fault
 return OK;
}

Status Locate(Sqlist *L,ElemType e,int *locp){
    int i;
    if(L->data==NULL){
        return ERROR;
    }
    for(i=0;i<L->length;i++){
        if(L->data[i]==e){
        *locp=i+1;
        return OK;
        }
    }
    *locp=0;
}



Status Print(Sqlist L){
    if(L.data==NULL){
        return ERROR;
     }
    for(int i=0;i<L.length;i++){
        printf("%d ",L.data[i]);
  
    }
    printf("\n");
    return OK;
}

int main(){
    Sqlist L;
    InitList(&L);
    
    if(InitList(&L)==OK){
        printf("OK\n"); 
    }
    else{
        printf("ERROR\n");
    }
    Insert(&L,1,3);
    Insert(&L,2,2);
    Insert(&L,3,5);
    int *elem1,*elem2;
    int *emp;
    Print(L);
    
    // Delete(&L,1,elem1);
    GetData(&L,1,elem2);
    IsEmpty(&L,emp);
    printf("%d",*emp);
    Print(L);
    
    return 0;
}


直接运行编译器没有报错,但是单步调试出现以下情况:

img

img

img

目前来看代码中只有Print和Insert函数正常(均没有第三个指针的函数参数),出问题的都是带第三个指针参数的函数,其他函数暂时没有测试,估计是和这些类似的问题

  • 写回答

2条回答 默认 最新

  • greatofdream 2021-12-01 00:57
    关注

    elem前面的*去掉
    比如

    elem=L->data[i-1];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 赞助了问题酬金 12月1日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 对于这个问题的代码运行
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败