/*【問題描述】
本題要求定義並實現乙個用於存放整型資料的集合,程式設計實現集合的各種操作並在main函式中測試。
【基本要求】
實現集合的以下操作:
(1)增加乙個數到集合中; //完成
(2)從集合中去掉乙個元素; //完成
(3)判斷乙個元素是否在集合中; //完成
(4)實現兩個集合的並運算;
(5)實現兩個集合的交運算;
(6)實現兩個集合的差運算;
(7)判斷兩個集合是否相等;
(8)判斷乙個集合是否是另乙個集合的子集,若是,則求絕對補集,否則,求相對補集;
(9)顯示輸出集合中的所有元素。 //完成
設計乙個選單,呼叫上述要求的所有功能及退出系統等。
【實現提示】
可以以有序鍊錶或順序表表示集合。
【測試資料】
在main函式中呼叫各種操作,顯示操作結果。測試資料應盡可能體現各種操作結果。
//庫函式標頭檔案包含
#include
#include
#include
//函式狀態碼定義
#define true
1#define false
0#define ok
1#define error
0#define infeasible-1
#define overflow-2
#define list_init_size
100#define listincrement
10//結構體定義
typedef int elemtype;
//表中的元素均為整型
typedef structsqlist;
//順序表型別定義
int listinsert_sq
(sqlist &
l, int pos, int e)
;//在pos處插入元素e
int listdelete_sq
(sqlist &
l, int pos, int &e)
;//在pos處刪除元素,並用e返回
int listlocate_sq
(sqlist l
, int e)
;//查詢元素,返回位置e
void
listprint_sq
(sqlist l);
//順序輸出線性表
//結構初始化與銷毀操作
int initlist_sq
(sqlist &l)
//主函式
int main()
for(int i =
1; i <=10;
++ i)
printf
("****************集合的操作(順序表)****************\n");
printf
("1.增加\n2.刪除\n3.查詢\n4輸出順序表\n");
printf
("請輸入操作:");
scanf
("%d"
,&operationtype)
;while
(operationtype !=0)
else
if(operationtype ==2)
else
if(operationtype ==3)
else
}else
if(operationtype ==4)
else
if(operationtype ==0)
else
printf
("請輸入操作:");
scanf
("%d"
,&operationtype);}
}int listinsert_sq
(sqlist &
l, int pos, int e)
int *p,
*q; p =&(
l.elem[pos -1]
);//將原來pos位置元素的位址分配給指標p
for(q =&(
l.elem[
l.length -1]
);q >= p;
--q)
*p = e;
//將資料e放到pos位置++l
.length;
//順序表的長度要加一
returnok;
}else
return
overflow;}
int listdelete_sq
(sqlist &
l, int pos, int &e)
l.length =
l.length -1;
//l的長度減一
}else
return
overflow;}
int listlocate_sq
(sqlist l
, int e)}if
(a >=
0&&a <=
l.length -1)
return a +1;
//如果a的值滿足要求,則返回a
else
return
error
;//如果a不滿足,則返回錯誤。
}void
listprint_sq
(sqlist l
)printf
("%d",l
.elem[
l.length -1]
);}
線性表表示集合
集合我們高中都學過吧?最重要的幾個特點 元素不能重複 各個元素之間沒有關係 沒有順序 集合內的元素可以是單元素或者是集合。對集合的操作 交集並集差集等,還有對自身的加減等。需要頻繁的加減元素,所以順序儲存效率較低,但是我們還是說一下是怎麼實現的 用01向量表示集合,因為現實中任何乙個有窮集合都能對應...
鍊錶表示的兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 一 public listnode addt...
鍊錶表示的兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 一 1 public listnode ad...