版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淮陰工學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告作者:學(xué)號(hào):班級(jí) :學(xué)院 :專業(yè) :題目 :指導(dǎo)教師:2016年1月.目錄1課題描述 .12系統(tǒng)設(shè)計(jì) .12.1功能模塊設(shè)計(jì) .12.1.1基于單鏈表設(shè)計(jì) .12.1.2基于順序表設(shè)計(jì) .22.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) .22.2.1基于單鏈表設(shè)計(jì) .22.1.2基于順序表設(shè)計(jì) .32.3算法設(shè)計(jì) .32.3.1基于單鏈表,順序表設(shè)計(jì) .33.1菜單設(shè)計(jì)(基于單鏈表) .53.2源代碼設(shè)計(jì)(基于單鏈表).53.3菜單設(shè)計(jì)(基于順序表) .103.4源代碼設(shè)計(jì)(基于順序表).104.1最終結(jié)果(基于單鏈表) .204.2最終結(jié)果(基于順序表) .20結(jié)論 .21致謝 .22參
2、考 文 獻(xiàn) .23.1 課題描述編制一個(gè)能演示執(zhí)行集合的交、并和差運(yùn)算的程序。集合元素用小寫英文字母,執(zhí)行各種操作應(yīng)以對(duì)話方式執(zhí)行。利用單鏈表表示集合;理解好三種運(yùn)算的含義2 系統(tǒng)設(shè)計(jì)2.1 功能模塊設(shè)計(jì)基于單鏈表設(shè)計(jì)(1)節(jié)點(diǎn)結(jié)構(gòu)單元模塊定義有序表的節(jié)點(diǎn)結(jié)構(gòu);typedef struct LNode/定義結(jié)構(gòu)體類型指針 char data;struct LNode*next;*pointer;(2)有序表單元模塊實(shí)現(xiàn)有序表的抽象數(shù)據(jù)類型;readdata(pointer head)初始條件: head 是以 head 為頭節(jié)點(diǎn)的空鏈表。操作結(jié)果:生成以head 為頭節(jié)點(diǎn)的非空鏈表。pop(p
3、ointer head)初始條件: head 是以 head 為頭節(jié)點(diǎn)的非空鏈表。操作結(jié)果:將以head 為頭節(jié)點(diǎn)的鏈表中數(shù)據(jù)逐個(gè)輸出。(3)集合單元模塊實(shí)現(xiàn)集合獲得抽象數(shù)據(jù)類型;and(pointer head1,pointer head2,pointer head3)初始條件:鏈表head1、head2、 head3 已存在操作結(jié)果:生成一個(gè)由head1 和 head2 的并集構(gòu)成的集合head3。or(pointer head1,pointer head2,pointer head3)初始條件:鏈表head1、head2、 head3 已存在操作結(jié)果:生成一個(gè)由head1 和 head2
4、 的交集構(gòu)成的集合head3。(4)主程序模塊Void main () 初始化;.do接受命令;處理命令;while (“命令” != “退出”); 基于順序表設(shè)計(jì)(1)順序表結(jié)構(gòu)單元模塊定義順序表的結(jié)構(gòu)體;typedef struct/定義 SeqList 的結(jié)構(gòu)體 DataType listMaxSize;int size ; SeqList;(2)函數(shù)單元模塊定義各種所需函數(shù);int ListDel( SeqList *L , int i , DataType *x)/順序表的刪除函數(shù)int ListGet(SeqList L , int i , DataType *x)/獲取順序表的元
5、素函數(shù)void ListFind(SeqList L , DataType x)/順序表查找元素函數(shù)void SelcetSort(SeqList *L )/ 順序表選擇排序函數(shù)void UnionSet(SeqList mylist1 , SeqList mylist2)/求并集函數(shù)void MixedSet(SeqList mylist1 , SeqList mylist2)/求交集元素函數(shù)void DiffentSet(SeqList mylist1 , SeqList mylist2) /求差集元素函數(shù)( 3)主函數(shù)單元模塊定義主函數(shù);void main() SeqList mylis
6、t1 , mylist2;/定義順序表 mylistint i;DataType temp;ListInitiate( &mylist1);ListInitiate( &mylist2);/初始化兩個(gè)順序表2.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)基于單鏈表設(shè)計(jì)定義結(jié)構(gòu)體類型指針,集合采用單鏈表存儲(chǔ)。typedef struct LNode/定義結(jié)構(gòu)體類型指針head1=(pointer)malloc(sizeof(struct LNode);head1->next=NULL;.head2=(pointer)malloc(sizeof(struct LNode);head2->next=
7、NULL;head3=(pointer)malloc(sizeof(struct LNode);基于順序表設(shè)計(jì)typedef struct/定義 SeqList 的結(jié)構(gòu)體 DataType listMaxSize; int size ;void UnionSet(SeqList mylist1 , SeqList mylist2)/求并集int m, i,j ;DataType x;SeqList Test;ListInitiate( &Test);/定義并初始化2.3 算法設(shè)計(jì)基于單鏈表,順序表設(shè)計(jì)數(shù)據(jù)輸入界面主菜單界面集集集合結(jié)合合的的束的交差并集集集運(yùn)運(yùn)運(yùn)算算算圖 2.1系統(tǒng)模塊
8、流程圖調(diào)用輸入函數(shù),輸入集合信息顯示主菜單.接受用戶選擇是否合法否是否是是否為 4調(diào)用對(duì)應(yīng)選項(xiàng)函數(shù)退出系統(tǒng)圖 2.2 主菜單流程圖主菜單用戶選擇序號(hào)是否合法否否是是否為 1是調(diào)用并集函數(shù)和輸出函數(shù)圖 2.3 并集模塊流程圖求交集與差集的流程圖與并集類似。.3 詳細(xì)設(shè)計(jì)3.1 菜單設(shè)計(jì)(基于單鏈表)圖 3.1 主界面3.2 源代碼設(shè)計(jì)(基于單鏈表)#include<stdio.h>#include<stdlib.h>typedef struct LNode/定義結(jié)構(gòu)體類型指針char data;struct LNode*next;*pointer;void readdat
9、a(pointer head)/定義輸入集合函數(shù)pointer p;char tmp;scanf("%c",&tmp);while(tmp!='n')p=(pointer)malloc(sizeof(struct LNode);/為指針 P 申請(qǐng)內(nèi)存空間p->data=tmp;p->next=head->next;head->next=p;scanf("%c",&tmp);void pop(pointer head)/定義輸出集合函數(shù)pop() 出棧函數(shù).pointer p;p=head->n
10、ext;while(p!=NULL)printf("%c",p->data);p=p->next;printf("n");void and(pointer head1,pointer head2,pointer head3)/定義集合的并集函數(shù)pointer p1,p2,p3;p1=head1->next;while(p1!=NULL)/遍歷鏈表 head1p3=(pointer)malloc(sizeof(struct LNode);p3->data=p1->data;p3->next=head3->next;
11、head3->next=p3;p1=p1->next;p2=head2->next;while(p2!=NULL)/遍歷鏈表 head2p1=head1->next;while(p1!=NULL)&&(p1->data!=p2->data)p1=p1->next;if (p1=NULL).p3=(pointer)malloc(sizeof(struct LNode);p3->data=p2->data;p3->next=head3->next;head3->next=p3;p2=p2->next;vo
12、id or(pointer head1,pointer head2,pointer head3)/定義集合的交集函數(shù)pointer p1,p2,p3;p1=head1->next;while(p1!=NULL)p2=head2->next;while(p2!=NULL)&&(p2->data!=p1->data)p2=p2->next;if(p2!=NULL)&&(p2->data=p1->data)p3=(pointer)malloc(sizeof(struct LNode);p3->data=p1->da
13、ta;p3->next=head3->next;head3->next=p3;p1=p1->next;void differ(pointer head1,pointer head2,pointer head3)/定義集合的差集函數(shù)pointer p1,p2,p3;p1=head1->next;while(p1!=NULL).p2=head2->next;while(p2!=NULL)&&(p2->data!=p1->data)p2=p2->next;if(p2=NULL)p3=(pointer)malloc(sizeof(s
14、truct LNode);p3->data=p1->data;p3->next=head3->next;head3->next=p3;p1=p1->next;void main()/主函數(shù)int x;printf("(輸入數(shù)據(jù) , 按回車鍵結(jié)束 , 第一個(gè)集合大于第二個(gè)集合)n");pointer head1,head2,head3;head1=(pointer)malloc(sizeof(struct LNode);head1->next=NULL;head2=(pointer)malloc(sizeof(struct LNode
15、);head2->next=NULL;head3=(pointer)malloc(sizeof(struct LNode);head3->next=NULL;printf("請(qǐng)輸入集合 1:n");readdata(head1);/調(diào)用輸入集合函數(shù)printf("請(qǐng)輸入集合 2:n");readdata(head2);/調(diào)用輸入集合函數(shù)A:printf("1.并集 2.交集 3. 差集 4.結(jié)束 x.重新運(yùn)算 n");do.printf("請(qǐng)選擇序號(hào) n");scanf("%d",&
16、amp;x);switch(x)case 1:printf("兩集合的并是 n");and(head1,head2,head3);/調(diào)用并集函數(shù)pop(head3);head3->next=NULL;break;case 2:printf("兩集合的交是 n");or(head1,head2,head3);/調(diào)用交集函數(shù)pop(head3);head3->next=NULL;break;case 3:printf("兩集合的差是 n");differ(head1,head2,head3);/調(diào)用差集函數(shù)pop(head3)
17、;head3->next=NULL;break;case 4:break;default:goto A;while(x!=4);.3.3 菜單設(shè)計(jì)(基于順序表)圖 3.2 主界面3.4 源代碼設(shè)計(jì)(基于順序表)#include <stdio.h>#include <stdlib.h>#include <string.h>#define MaxSize 100# define EQUAL "=" typedef char DataType;typedef struct/定義 SeqList 的結(jié)構(gòu)體DataType listMaxSi
18、ze;int size ; SeqList;void ListInitiate( SeqList *L)/初始化操作L->size = 0;int ListLength( SeqList L)/獲取長(zhǎng)度.return L.size;int ListInsert( SeqList *L , int i , DataType x)/ 插入函數(shù)的參數(shù)分別是SeqList 類型的變量,插入位置I ,和插入的元素 Xint j;if( L->size >= MaxSize)printf("順序表已滿,無(wú)法插入其他元素!n");return 0;system(&quo
19、t;pause");else if( i<0 && i>L->size )printf("參數(shù) i 不合法! n");return 0;system("pause");elsefor( j=L->size ; j>i ; j-)L->listj = L->listj-1;/將 i 至 size 中間的元素依次后移一個(gè)單位L->listi = x;/將 x 插入指定的位置iL->size +;/L的 size ,及長(zhǎng)度加一return 1;.int ListDel( SeqLi
20、st *L , int i , DataType *x)/順序表的刪除函數(shù)int j;if( L->size <= 0)printf("順序表已無(wú)數(shù)據(jù)可刪! n");return 0;system("pause");else if( i<0 && i>L->size-1 )printf("參數(shù) i 不合法! n");return 0;system("pause");else*x = L->listi;/保存刪除的元素到x 中for( j=i+1 ; j<=
21、L->size-1 ; j+)L->listj-1 = L->listj;/將 i+1 至 size 中間的元素依次前移一個(gè)單位L->size -;/L的 size ,及長(zhǎng)度加一return 1;int ListGet(SeqList L , int i , DataType *x)/獲取順序表的元素函數(shù)if( i<0 | i>L.size-1 ).printf("參數(shù) i 不合法! n");return 0;else*x = L.listi;return 1;void ListFind(SeqList L , DataType x)/順
22、序表查找元素函數(shù)int i;for(i=0 ; i<L.size; i+)if(L.listi = x)printf(" 與查找元素相同的位置為: %d n" , i+1 ); continue;if( i = L.size-1 )printf("沒(méi)有找到與所查詢相同的元素!n");void SelcetSort(SeqList *L )/順序表選擇排序函數(shù)int i,j;DataType temp;int length = ListLength( *L);for(i=0; i< length-1; i+).temp = L->list
23、i+1;j=i;while(j > -1 && temp < L->listj)L->listj+1 = L->listj;j-;L->listj+1 = temp;void UnionSet(SeqList mylist1 , SeqList mylist2)/求并集int m, i,j ;DataType x;SeqList Test;ListInitiate( &Test);/定義并初始化for(m=0 ; m <ListLength(mylist1) ; m+)ListGet(mylist1 , m , &x);
24、ListInsert( &Test , m , x );/先將順序表一中的元素放入順序表中for(i=0 ; i< ListLength(mylist2) ; i+)ListGet(mylist2 , i , &x);ListInsert( &Test , m , x ); / 再將順序表二中的元素放入順序表中 m+;for(i=0 ; i <ListLength(Test) ; i+)/求并集.for(j = i+1 ; j<ListLength(Test); j+)/將順序表中的相同的元素刪除if(Test.listi = Test.listj )
25、ListDel( &Test , j , &x);SelcetSort(&Test);printf(" The elements of the Union Set are : ");for(i=0 ; i <ListLength(Test) ; i+)ListGet(Test , i , &x);printf("%c" , x);printf("n");void MixedSet(SeqList mylist1 , SeqList mylist2)/求交集元素函數(shù)int m, i,j ;DataT
26、ype x;SeqList mylist;ListInitiate( &mylist);/定義并初始化SeqList Test;ListInitiate( &Test);m=0;for(i=0 ; i <ListLength(mylist1) ; i+)/求交集for(j = 0 ; j<ListLength(mylist2); j+)if(mylist1.listi = mylist2.listj ).ListInsert( &Test , m , mylist1.listi );/將 相 同的元素放在 Test 順序表中m+;continue;for(i
27、=0 ; i <ListLength(Test) ; i+)/求并集for(j = i+1 ; j<ListLength(Test); j+)/將順序表中的相同的元素刪除if(Test.listi = Test.listj )ListDel( &Test , j , &x);SelcetSort(&Test);/對(duì)順序表進(jìn)行有序化printf(" The elements of the Mixed Set are : ");for(i=0 ; i <Test.size ; i+)ListGet(Test , i , &x);
28、printf("%c" , x);printf("n");void DiffentSet(SeqList mylist1 , SeqList mylist2)/求差集元素函數(shù)int m=0,n, i,j ;DataType x;SeqList Test;.ListInitiate( &Test);for(i=0 ; i <ListLength(mylist1) ; i+)n=0;for(j = 0 ; j<ListLength(mylist2); j+)if(mylist1.listi = mylist2.listj )n+;if(n
29、 = 0)ListInsert( &Test , m , mylist1.listi );/將 相 同的元素放在 Test 順序表中m+;for(i=0 ; i <ListLength(Test) ; i+)/求并集for(j = i+1 ; j<ListLength(Test); j+)/將順序表中的相同的元素除if(Test.listi = Test.listj )ListDel( &Test , j , &x);SelcetSort(&Test);printf(" The elements of the Diffrent Set ar
30、e : ");for(i=0 ; i <ListLength(Test) ; i+)ListGet(Test , i , &x);printf("%c" , x);printf("n");.void main()SeqList mylist1 , mylist2;/定義順序表 mylistint i;DataType temp;ListInitiate( &mylist1);ListInitiate( &mylist2);/初始化兩個(gè)順序表printf("n%s%sn", EQUAL , EQU
31、AL);printf("nWelcome totheProgram ofCollection!n" );printf("n%s%sn", EQUAL , EQUAL);printf("n請(qǐng)輸入兩個(gè)集合! n");printf("n請(qǐng)輸入集合 1!: ");i = 0;while( (temp=getchar() ) != 'n')if(96<temp && temp<123)ListInsert( &mylist1 , i , temp);/順序表一賦值 temp
32、;i+;printf("n輸入集合 2!: ");i = 0;while( (temp=getchar() ) != 'n')if(96<temp && temp<123)ListInsert( &mylist2 , i , temp);/順序表一賦值 temp;i+;.printf("n collection one: " );for(i=0; i<mylist1.size; i+)printf("%c" , mylist1.listi);printf("nn&qu
33、ot;);printf(" collection two: ");for(i=0; i<mylist2.size; i+)printf("%c" , mylist2.listi);printf("nn");/ 調(diào)用各個(gè)函數(shù)printf("n請(qǐng)選擇功能 :!n");printf("n%s%sn", EQUAL , EQUAL);printf(" The number 1 is :并集 .n");printf(" The number 2 is :交集 .n&qu
34、ot;);printf(" The number 3 is :差集 .n");printf("%s%sn", EQUAL , EQUAL);while(1)int choice;printf("n請(qǐng)輸入您的選擇?。簄(othersexitthe programe!):");scanf("%d" , &choice);switch(choice)case 1 : UnionSet( mylist1 , mylist2); break;case 2 : MixedSet(mylist1 , mylist2); break;case 3 : DiffentSet(mylist1 , mylist2);break;default :
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版家電產(chǎn)品消費(fèi)者滿意度調(diào)查服務(wù)合同2篇
- 二零二五版房地產(chǎn)融資居間代理合同范本3篇
- 二零二五年電影聯(lián)合制作與市場(chǎng)推廣合同2篇
- 二零二五版茶葉茶具專賣店加盟管理合同3篇
- 二零二五版汽車購(gòu)置貸款保證擔(dān)保合同3篇
- 二零二五年度化肥原料進(jìn)口與分銷合同3篇
- 二零二五年度航空航天股權(quán)買賣合同范本3篇
- 二零二五版戶外廣告牌定期檢查與維修合同3篇
- 二零二五年度駕校車輛購(gòu)置稅承包合同3篇
- 國(guó)際貿(mào)易第六章出口合同訂立2025年綠色貿(mào)易標(biāo)準(zhǔn)與認(rèn)證3篇
- 水泥廠鋼結(jié)構(gòu)安裝工程施工方案
- 2023光明小升初(語(yǔ)文)試卷
- 三年級(jí)上冊(cè)科學(xué)說(shuō)課課件-1.5 水能溶解多少物質(zhì)|教科版
- GB/T 7588.2-2020電梯制造與安裝安全規(guī)范第2部分:電梯部件的設(shè)計(jì)原則、計(jì)算和檢驗(yàn)
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學(xué)道德與法治學(xué)科高級(jí)(一級(jí))教師職稱考試試題(有答案)
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 實(shí)用性閱讀與交流任務(wù)群設(shè)計(jì)思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
- 酒店市場(chǎng)營(yíng)銷教案
評(píng)論
0/150
提交評(píng)論