集合的並交叉運算資料結構課設

2021-10-01 15:06:32 字數 3261 閱讀 3466

#include#include#define true 1

#define false 0

#define ok 1

#define error 0

#define overflow -1

#define list_init_size 100 //初始表空間大小

#define listincrement 10 //表長增量

typedef int status; /**status是函式型別,其值是函式結果狀態**,如ok等**/

typedef char elemtype; /*elemtype型別根據實際情況而定,這裡假設為char*/

typedef structsqlist;//就是把它當成乙個動態變化的陣列

sqlist la,lb,lc,ld; /**定義全域性變數**/

/**構造乙個空的線性表l**/

status initlist_sq(sqlist &l) /**該函式的時間複雜度為o(n)**/

/**在順序表的邏輯為i的位置插入新元素e的函式**/

status listinsert_sq(sqlist &l,int i,elemtype e)

q = &(l.elem[i - 1]); //q為插入位置

for(p = &(l.elem[l.length - 1]); p >= q; --p) //判斷條件是找到插入或者是刪除的位置

*(p + 1) = *p; //插入位置及之後的元素往右移

*q = e; //插入e

++l.length; //表長加1

return ok;

}/**建立乙個線性表,即輸入資料,根據集合定義:集合中的元素不能相等建立**/

void createlist_sq(sqlist &l)

else

inlist = false;

if(!inlist && ch != '\n') listinsert_sq(l,l.length+1,ch);}}

/**判斷兩元素是否相等,若相等則返回true;否則返回false**/

status equal(elemtype a,elemtype b)

/**遍歷集合是否找到與所需要的值進行比較根據目的不同對其的操作也是不同**/

int locateelem_sq(sqlist l,elemtype e) //該函式的時間複雜度為o(n)

/*銷毀線性表的函式*/

status clear_sq(sqlist &l)

/**列印順序表函式**/

void print_sq(sqlist l)

/**求集合的並集的函式**/

void union_sq(sqlist la,sqlist lb,sqlist &lc)}

/**求集合的交集的函式**/

void mix_sq(sqlist la,sqlist lb,sqlist &lc)

}/**求集合的差集函式**/

void differ_sq(sqlist la,sqlist lb,sqlist &lc)}

void index_sq()

printf("\t\t|**** 您是否還想繼續計算。是請輸入1,否請輸入0 ****|\n");

printf("\t\t\t");

scanf("%d",&l);

getchar();

}//while語句判斷是否繼續

printf("\n\t\t|**************** 歡迎使用,謝謝!*****************|\n");

getchar();

}int main()

#include#include#define error -1

#define ok 1

typedef int status; //要加分號

typedef int elemtype;

typedef struct lnodelnode, *linklist;

//建立空鍊錶

status init_linklist(linklist &l)

int x,y;

// 輸入

status input(linklist &l,int n) //不能寫成input(linklist l,int n),這樣的值不會改變

else

return error;

} printf("集合輸入完成!\n");

return ok;

}//輸出

void output(linklist l)

}//實現鍊錶的清空

status clearlist_l(linklist &l)

l->next=null; //將l鍊錶的next指標域 置為 null 空

return ok;

}//並集 (先清空c,c中的資料會在後面的迴圈中不斷插入!就是a與c找比較,c中沒有a的就插入;b與c找比較,c中沒有b的就插入(遍歷完,即==null的時候插入))

void and_set(linklist la,linklist lb,linklist &lc)

p=p->next;

}//以上是對a集合進行的插入,此時插入的時候c集合是沒有值得,這個時候就不需要進行比較的操作

//對鍊錶b插入c中

p=lb->next; //指標p控制掃瞄lb的每乙個結點(元素)

while(p)

p=p->next;

}//對b的進行同樣的過程的比較

}//交集 (先清空c鍊錶,再a與b中找相同的break(不為空,記錄),再與c中比較(與並集同理插入)插入c中即可)

void intersection(linklist la,linklist lb,linklist &lc)

if(q) //p不為空

if(s==null)//如果 查到最後沒有查到所需要的結果那麼的話就是進行 控制c的頭指標進指向了null

}p=p->next; }}

//差集 (先清空c後,找a中與b中不同的,找到b最後,即==null的時候插入即可!)

void difference_set(linklist la,linklist lb,linklist &lc)

if(q==null)

if(s==null)

}p=p->next; }}

void show()

int main()

} return 0;

}

資料結構課設

10 多種基本內排序方法的實現 問題描述 設計乙個合成的排序程式。可供排序的方法是 插入排序 快速排序 歸併排序 堆排序。要求程式具有 1 顯示排序結果.2 提供最好和最壞情況下對比計時的功能。3 提供在不同陣列元素的個數情況 當n分別等於100,1000,5000,20000時 下各種排序演算法的...

集合的並交叉運算

實驗 include include include include using namespace std void in set a void out set a void jiao set a,set b,set c void bing set a,set b,set c it b.begin...

資料結構課設框架

標頭檔案上界 include include include include include include using namespace std define true 1 define false 0 標頭檔案下界 結構體上界 食物 typedef struct food food,ptr f...