数据结构顺序表
#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;
}
直接运行编译器没有报错,但是单步调试出现以下情况:
目前来看代码中只有Print和Insert函数正常(均没有第三个指针的函数参数),出问题的都是带第三个指针参数的函数,其他函数暂时没有测试,估计是和这些类似的问题