順序表表示集合的操作

2021-09-24 18:40:33 字數 2781 閱讀 4085

/*【問題描述】

本題要求定義並實現乙個用於存放整型資料的集合,程式設計實現集合的各種操作並在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...