#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef int ElementType
typedef struct
{
ElementType *array; // 存放元素的陣列
int length; // 當前長度
int capacity; // 陣列容量
}SqList;
// 順序表的創建
SqList *createList(int capacity)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
L->capacity=SIZE;
L->array=(ElementType*)malloc(SIZE*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)
{
i=L->length-1;
while(i>=0&&L->array[i]!=e){
i--;
}
return i;
}
// 順序表的插入
int insertlist(SqList *L,int i,ElementType e)
{
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)
{
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);
L2_Len=listlength(L2);
ElementType e;
for(i=1;i<=L2_Len;i++)
{
GetElement(L2,i,&e);
if(!find(*L1,e)) // 在表L1中沒找到該元素,則將該元素插入表L1中
{
insertlist(L1,++L1_Len,e);
}
}
}
int main()
{
SqList *LA,*LB;
ElementType e;
SqList *LA=createList(capacity);
SqList *LB=createList(capacity);
printf("尾部插入法生成初始資料:\n");
Addlist(&LA);
printf("LA表中元素為:");
Outputlist(&LA);
Addlist(&LB);
printf("LB表中元素為:");
Outputlist(&LB);
mergelist(&LA,&LB);
printf("LA和LB取并集后的元素為:");
Outputlist(&LA);
return 0;
}
這是程式的錯誤提示:
\資料結構與演算法\順序表\Sqlist_Operate.c(9) : error C2054: expected '(' to follow 'ElementType'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(13) : error C2085: 'SqList' : not in formal parameter list
F:\資料結構與演算法\順序表\Sqlist_Operate.c(16) : error C2061: syntax error : identifier 'SqList'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(27) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(27) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(27) : error C2059: syntax error : 'type'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(27) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(37) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(37) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(37) : error C2370: 'ElementType' : redefinition; different storage class
F:\資料結構與演算法\順序表\Sqlist_Operate.c(7) : see declaration of 'ElementType'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(37) : error C2146: syntax error : missing ';' before identifier 'e'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(37) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(38) : error C2054: expected '(' to follow 'e'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(47) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(47) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(47) : error C2059: syntax error : 'type'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(47) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(68) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(68) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(68) : error C2059: syntax error : 'type'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(68) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(84) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(84) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(84) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(85) : error C2054: expected '(' to follow 'L'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(90) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(90) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(90) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(91) : error C2054: expected '(' to follow 'L'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(103) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(103) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(103) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(104) : error C2054: expected '(' to follow 'L'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(114) : error C2143: syntax error : missing ')' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(114) : error C2143: syntax error : missing '{' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(114) : error C2143: syntax error : missing ';' before '*'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(114) : error C2059: syntax error : ')'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(115) : error C2054: expected '(' to follow 'L2'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(136) : error C2065: 'LA' : undeclared identifier
F:\資料結構與演算法\順序表\Sqlist_Operate.c(136) : error C2065: 'LB' : undeclared identifier
F:\資料結構與演算法\順序表\Sqlist_Operate.c(136) : error C2100: illegal indirection
F:\資料結構與演算法\順序表\Sqlist_Operate.c(137) : error C2275: 'ElementType' : illegal use of this type as an expression
F:\資料結構與演算法\順序表\Sqlist_Operate.c(7) : see declaration of 'ElementType'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(137) : error C2146: syntax error : missing ';' before identifier 'e'
F:\資料結構與演算法\順序表\Sqlist_Operate.c(139) : warning C4013: 'createList' undefined; assuming extern returning int
F:\資料結構與演算法\順序表\Sqlist_Operate.c(139) : error C2065: 'capacity' : undeclared identifier
F:\資料結構與演算法\順序表\Sqlist_Operate.c(139) : error C2106: '=' : left operand must be l-value
F:\資料結構與演算法\順序表\Sqlist_Operate.c(140) : error C2106: '=' : left operand must be l-value
F:\資料結構與演算法\順序表\Sqlist_Operate.c(144) : warning C4013: 'Addlist' undefined; assuming extern returning int
F:\資料結構與演算法\順序表\Sqlist_Operate.c(146) : warning C4013: 'Outputlist' undefined; assuming extern returning int
F:\資料結構與演算法\順序表\Sqlist_Operate.c(152) : warning C4013: 'mergelist' undefined; assuming extern returning int
執行 cl.exe 時出錯.
uj5u.com熱心網友回復:
錯誤: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);
以上修改后編譯通過
uj5u.com熱心網友回復:
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;
}
樓主對變數的宣告和定義、指標等概念掌握的很不清晰
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249957.html
標籤:C語言
上一篇:C語言 貪吃蛇郵箱控制臺報錯
