#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];
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];
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]);
return OK;
}
}
int main(){
Sqlist L,t;
InitList(&L);
InitList(&t);
if(InitList(&L)==OK){
printf("OK\n");
}
else{
printf("ERROR\n");
}
Insert(&L,1,3);
Insert(&L,2,2);
Print(L);
for (int i = 1; i <=MAXSIZE; i++) {
t.data[i - 1] = i;
t.length++;
}
Print(t);
return 0;
}
Print函数不知道为什么只能输出第一个值,Delete函数貌似也有问题,其他函数还没试验。感觉思路没有问题,不知道哪里有毛病