user-0 提问: 数据结构：两个顺序表取并集，请问代码哪里不对？

回复:
user: user-0
content: ompiling... Sqlist_Operate.c F:\数据结构与算法\顺序表\Sqlist_Operate.c(126) : error C2275: 'ElementType' : illegal use of this type as an expression         F:\数据结构与算法\顺序表\Sqlist_Operate.c(7) : see declaration of 'ElementType' F:\数据结构与算法\顺序表\Sqlist_Operate.c(126) : error C2146: syntax error : missing ';' before identifier 'e' F:\数据结构与算法\顺序表\Sqlist_Operate.c(126) : error C2065: 'e' : undeclared identifier 执行 cl.exe 时出错.  Sqlist_Operate.obj - 1 error(s), 0 warning(s)

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  #define SIZE 100  //typedef int ElementType typedef int ElementType; typedef struct {     ElementType *array;   // 存放元素的数组     int length;  // 当前长度     int capacity;  // 数组容量 }SqList;  // 顺序表的创建 SqList *createList(int capacity) {     SqList *L;      L=(SqList*)malloc(sizeof(SqList));     L->length=0;     //L->capacity=SIZE;     L->capacity=capacity;     L->array=(ElementType*)malloc(capacity*sizeof(ElementType));      return L; }  // 获得顺序表的元素 int GetElement(SqList *L,int i,ElementType *e) {     if(i<1||i>L->length){         return 0;     }     *e=L->array[i-1];     return 1; }  // 顺序表的查找 int find(SqList *L,ElementType e) {     int i;      i=L->length-1;     while(i>=0&&L->array[i]!=e){         i--;     }      if (i >= 0)         return i;     else         return 0; }  // 顺序表的插入 int insertlist(SqList *L,int i,ElementType e) {     int k;      if(L->length>=L->capacity)   // 1.判断顺序表的存储空间是否满     {         return 0;     }     if(i<1||i>L->length+1)     // 2.判断插入位置i是否合法     {         return 0;     }     for(k=L->length-1;k>=i-1;k--)     {         L->array[k+1]=L->array[k];    // 3.从最后一个元素开始向后移动     }     L->array[i-1]=e;      // 4.在第i个位置插入元素     L->length++;         // 5.表长度加1      return 1; }  // 顺序表的删除 int deletelist(SqList *L,int i,ElementType *e) {     int k;      if(i<1||i>L->length)    // 1.判断删除位置i是否合法     {         return 0;     }     *e=L->array[i-1];    // 删除的第i个元素     for(k=i;k<L->length;k++)     {         L->array[k-1]=L->array[k];    // 2. 从i+1个元素开始向前移动     }     L->length--;     return 1; }  // 顺序表的长度 int listlength(SqList *L) {     return L->length; }  //按尾部插入法生成初始数据 void Addlist(SqList *L) {     int value;     printf("请输入内容，-1结束\n");     scanf("%d",&value);     while(value!=-1)     {         insertlist(L,L->length+1,value);         scanf("%d",&value);     } }  //输出数据 void Outputlist(SqList *L) {     int i;     for(i=0;i<L->length;i++)     {         printf("%d ",L->array[i]);     }     printf("\n"); }  // 顺序表的合并：取并集 int mergelist(SqList *L1,SqList *L2) {     int L1_Len,L2_Len;     int i;      //L1_Len=listlength(*L1);     L1_Len=listlength(L1);     L2_Len=listlength(L2);      ElementType e;     for(i=1;i<=L2_Len;i++)     {         GetElement(L2,i,&e);         //if(!find(*L1,e))     // 在表L1中没找到该元素，则将该元素插入表L1中         if(!find(L1,e))     // 在表L1中没找到该元素，则将该元素插入表L1中         {             printf("hellowrold!\n");             //insertlist(L1,++L1_Len,e);             insertlist(L1,L1->length+1,e);         }     }  }  int main() {     SqList *LA,*LB;     ElementType e;      //SqList *LA=createList(capacity);     //SqList *LB=createList(capacity);     LA=createList(SIZE);     LB=createList(SIZE);      printf("尾部插入法生成初始数据：\n");      //Addlist(&LA);     Addlist(LA);     printf("LA表中元素为：");     //Outputlist(&LA);     Outputlist(LA);      //Addlist(&LB);     Addlist(LB);     printf("LB表中元素为：");     //Outputlist(&LB);     Outputlist(LB);      //mergelist(&LA,&LB);     mergelist(LA, LB);     printf("LA和LB取并集后的元素为：");     //Outputlist(&LA);     Outputlist(LA);      return 0; }  供参考  语法错误太多，基本上几条语句就对应一个编译error；  解决语法错误是最基本的编程能力，还需要多努力呀

user: user-0
content: 错误6和错误7是看的小甲鱼视频里面写的

user: user-0
content: MATLAB用惯了，有几年没用C语言了，这次学习数据结构，有些跟着书上敲，疏忽了一些问题，对指针不熟。

user: user-2
content: Addlist(&LA); printf("LA表中元素为："); Outputlist(&LA);  Addlist(&LB); printf("LB表中元素为："); Outputlist(&LB);  mergelist(&LA,&LB); printf("LA和LB取并集后的元素为："); Outputlist(&LA);  这些函数调用全部写错了，LA和LB本身就是指针了，再取地址&LA明显是错误的。 修改如下后能正确运行  int main() {     SqList *LA, *LB;     ElementType e;      LA = createList(10);     LB = createList(10);      printf("尾部插入法生成初始数据：\n");      Addlist(LA);     printf("LA表中元素为：");     Outputlist(LA);      Addlist(LB);     printf("LB表中元素为：");     Outputlist(LB);      mergelist(LA, LB);     printf("LA和LB取并集后的元素为：");     Outputlist(LA);      return 0; }   楼主对变量的声明和定义、指针等概念掌握的很不清晰

user: user-2
content: 错误： 1、typedef int ElementType  //这里少了个 ；号  typedef int ElementType; 2、L = (SqList*)malloc(sizeof(SqList));  //L没有声明   SqList *L = (SqList*)malloc(sizeof(SqList));  3、i = L->length - 1; //i 没有声明  int i = L->length - 1; 4、for (k = L->length - 1; k >= i - 1; k--)  //k没有声明  for (int k = L->length - 1; k >= i - 1; k--) 5、for (k = i; k < L->length; k++)  //错误同上 for (int k = i; k < L->length; k++) 6、L1_Len = listlength(*L1);  //形参是指针，实参是取值，形参和实参不符 L1_Len = listlength(L1); 7、 if (!find(*L1, e))     // 在表L1中没找到该元素，则将该元素插入表L1中    //错误同上  if (!find(L1, e))      8、     SqList *LA, *LB;                                 //这里已经声明了     ElementType e;      SqList *LA = createList(capacity);    //这里的SqList *LA就重复了     LA = createList(capacity);  这里的capacity没有定义，不知道是什么，随便输入个int值如LA = createList(10);      SqList *LB = createList(capacity);                                                    LB = createList(10);  以上修改后编译通过