user-0 提问: 这代码哪里有错，求解啊

回复:
user: user-1
content: #include "stdio.h" #include "stdlib.h"  typedef char ListItem;  struct alist {     //int n; /* 表长，当表为空时，n=0 */     int maxsize; /* 表示线性表的最大长度 */     int  length;     ListItem * data; /* 表元素数组 */ };  typedef struct alist *List;  List ListInit (int size); /* 初始化函数 */ int ListEmpty(List L); /* 判断线性表L是否为空 */ int ListLength(List L); /* 求表长 */ void ListInsert(int k, ListItem x, List L); /* 第k 个元素之后插入一个新元素x */ int ListLocate(ListItem x, List L); /* 返回元素x在表中的位置 */ ListItem ListRetrieve(int k, List L); /* 获取线性表中的第k个数据元素内容 */ void PrintList(List  L); /* 输出整个线性表 */ ListItem ListDelete(int k, List L); /* 将第k个元素删除 */  int main(int argc, char* argv[]) {     List  L = ListInit(10);      ListInsert(0, 'a', L);     ListInsert(1, 'b', L);     ListInsert(2, 'c', L);     ListInsert(3, 'd', L);     ListInsert(4, 'e', L);      PrintList(L);      ListDelete(4, L);      PrintList(L);      int loc = ListLocate(3, L);     printf("元素 3 的位置: %c\n\n", loc);      if(ListEmpty(L))     {         printf("线性表L为空!\n\n");     }     else     {         printf("线性表L不空!\n\n");     }      int length = ListLength(L);     printf("线性表L表长：%d\n\n", length);      /* ======================================== */     /* 可以在下面进一步测试您编写的函数的功能 */     /* ======================================== */       return 0; }  /* 初始化函数 */ List ListInit (int size) {     List  L;     L = (List) malloc(sizeof(struct alist));      /* 请使用malloc函数或者new操作，为线性表分配初始空间*/      L->maxsize=size;     //L->n=0;                         /*将当前线性表长度置0*/     L->length = 0;      //为data申请空间     L->data = (ListItem *)malloc(sizeof(ListItem) * size);     if (!L->data)         exit(0);      return L;                       /*成功，返回L*/ }  /* 判断线性表L是否为空 */ int ListEmpty(List L) {     /* 请编写代码，实现函数功能 */      if (L->length == 0) { return 1; }     return 0;  }  /* 求表长 */ int ListLength(List L) {     if (L == NULL) { return 0; }  return L->length;     /* 请编写代码，实现函数功能 */  }  /* 第k 个元素之后插入一个新元素x */ void ListInsert(int k, ListItem x, List L) {     printf("在位置 %d 插入元素 %c\n\n", k, x);     int i;     //if (k < 0 || k > L->n)     if (k < 0 || k > L->length)     {         printf("out of bounds");         exit(0);     }      if (L->length == L->maxsize)     {         printf("out of memory");         //exit(0);         return;     }     else     {         //for (k = i; k <= L->length; k--)         for (i = L->length; i > k; i--)         {             L->data[i + 1] = L->data[i];         }         //L->data[i - 1] = x;         L->data[k] = x;         L->length++;   //数据表的长度加1     }                      /* 请在此添加代码，实现在第k个元素后插入值为x的新元素的功能 */  }  /* 返回元素x在表中的位置 */ int ListLocate(ListItem x, List L) {     /* 请在此添加代码，实现函数功能 */     int k;     for (k = 0; k < L->length; k++)     {         if (L->data[k] == x)         {             //k为e对应的数组下标，在表中对应序号应为k+1             return k + 1;         }     }     return 0; }  /* 获取线性表中的第k个数据元素内容 */ ListItem ListRetrieve(int k, List L) {     /*判断k值是否合理，若不合理，ERROR*/     //if (k<1 || k>L->n)     if (k<1 || k>L->length)     {         printf("ERROR: out of bounds");         exit(0);     }      /* 请在此添加代码，实现函数功能 */     if (L->length < 1 || (L->length > ListLength(L)))     {         return 0;     }     //数据元素的序号从1开始，数组下表从0开始，第k个元素对应的数组下标为k-1;     return L->data[k - 1]; }  /* 输出整个线性表 */ void PrintList(List  L) {     /* 请编写代码，实现函数功能 */     int k;     if (ListEmpty(L))     {         printf("表为空！\n");         return;     }     //for (k = 0; k < L->length; k++)     //for (k = 0; k < L->n; k++)     for (k = 0; k < L->length; k++)     {         printf("%-3d", L->data[k]);     }     printf("\n"); }  /* 将第k个元素删除 */ ListItem ListDelete(int k, List L) {     int  i; ListItem x;     //if (k<1||k>L->n)     if (k<1||k>L->length)     {         printf("ERROR: out of bounds");         exit(0);     }      printf("删除第 %d 个元素\n\n", k);     x=L->data[k-1];      x = L->data[i - 1];     for (k = i; k < L->length; k++)     {         L->data[k - 1] = L->data[k];     }     L->length--;       return x; }  供参考～

user: user-2
content: 老兄　你出问题都不带ｄｅｂｕｇ的吗？  oid ListInsert(int k, ListItem x, List L) {     printf("在位置 %d 插入元素 %c\n\n", k, x);   int i;　　　　／／没有初始化     if (k < 0 || k > L->n)     {         printf("out of bounds");         exit(0);     }      if (L->n == L->maxsize)     {         printf("out of memory");         exit(0);     }     else     { for (k = i; k <= L->length; k--)　　　　／／ｆｏｒ循环不会执行         {　　             L->data[k + 1] = L->data[k];         } L->data[i - 1] = x;　　　　　　／／数组越界，ｃｏｒｅ　ｄｕｍｐ

user: user-3
content: 你应该告诉我们你说的“错”的现象是什么，是编译错误还是运行达不到预期？不然我们很难帮你定位啊