數據結構課程設計報告附代碼_第1頁
數據結構課程設計報告附代碼_第2頁
數據結構課程設計報告附代碼_第3頁
數據結構課程設計報告附代碼_第4頁
數據結構課程設計報告附代碼_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、. 第 PAGE 1 頁應用技術學院課程設計報告課程名稱數據構造課程設計設計題目 猴子選大王;建立二叉樹;各種排序;有序表的合并;成績管理系統;院系計算機科學與信息工程專業計算機科學與技術班級*指導教師日期目的與要求穩固和加深對常見數據構造的理解和掌握掌握基于數據構造進展算法設計的根本方法掌握用高級語言實現算法的根本技能掌握書寫程序設計說明文檔的能力提高運用數據構造知識及高級語言解決非數值實際問題的能力課程設計容說明工程一對設計任務容的概述學生成績管理*任務:要現對學生資料的錄入、瀏覽、插入和刪除等功能。輸入:設學生成績以記錄形式存儲,每個學生記錄包含的信息有:*和各門課程的成績,設學生成績至

2、少3門以上。存儲構造:采用線性鏈式構造。詳細設計LinkList *create():輸入學生成績記錄函數;void print(LinkList *head):顯示全部記錄函數LinkList *Delete(LinkList *head):刪除記錄函數LinkList *Insert(LinkList *head):插入記錄函數void menu_select():菜單項選擇擇void ScoreManage():函數界面程序流程圖3刪除學生記錄4插入學生記錄1輸入學生記錄輸入n0n6主界面2輸出學生記錄退出學生成績管理系統5退出判斷nn=5n=1、2、3、4程序模塊及其接口描述該程序可以

3、分為以下幾個模塊:1、菜單項選擇擇:void menu_select(); 提供五種可以選擇的操作,在main函數過switch語句調用菜單menu_select()函數,進入不同的功能函數中完成相關操作。2、輸入功能:LinkList *create(); 通過一個for循環語句的控制,可以一次完成無數條記錄的輸入。并將其存入鏈表。 3、輸出功能:void print(LinkList *head);通過一個while的循環控制語句,在指針p!=NULL時,完成全部學生記錄的顯示。知道不滿足循環語句,程序再次回到菜單項選擇擇功能界面。4、刪除功能:LinkList *Delete(LinkL

4、ist *head); 按想要刪除的學生的*首先進展查找,通過指針所指向結點的下移來完成,如果找到該記錄,則完成前后結點的連接,同時對以查找到的結點進展空間的釋放,最后完成對*個學生記錄進展刪除,并重新存儲。5、插入功能:LinkList *Insert(LinkList *head);輸入你想插入的位置,通過指針所指向結點的下移,找到該位置,將該新的學生記錄插入到該結點,并對該結點后面的指針下移。鏈表長度加一,重新存儲。程序的輸入與輸出描述輸入:調用LinkList *create()函數,輸入學生的、*、三門功課的成績;輸出:調用void print(LinkList *head)函數,輸

5、出學生的記錄。程序測試主菜單:成績管理系統的主界面:學生成績記錄的輸入:輸出學生成績記錄:學生成績記錄的刪除刪除*是1101的學生記錄插入新的學生成績記錄插入*為1103的學生記錄尚未解決的問題或改良方向尚未解決的問題:該成績管理系統還存在不少缺陷,而且它提供的功能也是有限的,只能實現學生成績的輸入、輸出、刪除、插入。對于,學生成績記錄的文件保存以及按*、等的查詢也是缺少的。還有就是,對于多個學生成績的操作也是不夠的。改良的方向:在時間許可的條件下,盡量的完善該系統的各種功能,同時也應修改系統,讓它更為人性化、簡單化,被廣闊用戶所承受。對軟件的使用說明該軟件是屬于比擬低級的軟件,只是包含了課程

6、設計的要求的幾個功能:輸入、輸出、刪除、插入。所以用戶在使用的過程中肯定會受到一定的局限性、不方便性,但由于時間的緣故,無法將軟件做到盡善盡美。工程二對設計任務容的概述各種排序任務:用程序實現插入法排序、選擇法排序、起泡法改良算法排序;利用插入排序、選擇法排序和冒泡法的改良算法,將用戶隨機輸入的一列數按遞增的順序排好。輸入的數據形式為任何一個正整數,大小不限。輸出的形式:數字大小逐個遞增的數列。功能描述該函數有以下幾個功能:對R0.n-1按遞增有序進展直接插入排序對R0.n-1按遞增有序進展冒泡排序對R0.n-1按遞增有序進展直接選擇排序排序后的輸出5)調用所有排序,實現排序程序流程圖直接插入

7、排序InsertSort()退出排序Sort直接選擇排序SelectSort()冒泡排序BubbleSort()詳細設計void InsertSort(RecType R,int n):對R0.n-1按遞增有序進展直接插入排序void BubbleSort(RecType R,int n):對R0.n-1按遞增有序進展冒泡排序void SelectSort(RecType R,int n):對R0.n-1按遞增有序進展直接選擇排序void disp(RecType R,int n):排序后的輸出void Sort():調用所有排序,實現排序程序模塊及其接口描述該程序分為五個模塊:1.輸入功能:

8、void Sort() 建立一個數組存放用戶在鍵盤上輸入的關鍵字,在分別調用各種排序的函數,對關鍵字進展排序。2.直接插入排序功能:void InsertSort(RecType R,int n)將后一個數與前一個數比擬,將其插入到第一個比它大的大的數前面,其余數字往后移一個位置。每次從無序表中取出第一個元素,把它插入到有序表的適宜位置,使有序表仍然有序。3.冒泡排序功能:void BubbleSort(RecType R,int n)在排序過程中,執行完最后的排序后,雖然數據已全部排序完備,但程序無法判斷是否完成排序,為了解決這一缺乏,可設置一個標志位e*change,將其初始值設置為非0,

9、表示被排序的表是一個無序的表,每一次排序開場前設置e*change值為0,在進展數據交換時,修改e*change為非0。在新一輪排序開場時,檢查此標志,假設此標志為0,表示上一次沒有做過交換數據,則完畢排序;否則進展排序。4.直接選擇排序功能:void SelectSort(RecType R,int n)在無序區里找最小的數,第i小的數字放在第i個位置上,與原來第i個位置上的數字交換。5.輸出功能:void disp(RecType R,int n)程序的輸入與輸出描述輸入:要10個為數字的關鍵字;輸出:排序后新的序列。程序測試輸入關鍵字,調用各種排序函數尚未解決的問題或改良方向改良方向:雖

10、然給出了它的各種排序的結果,但是沒有它的箱子過程,這是我的改良的方向,希望能將每種排序的過程也能展示給用戶,來表達它們的不同。對軟件的使用說明用戶只需根據提示,在鍵盤上輸入要排序的10個關鍵字。工程三對設計任務容的概述有序表的合并要求輸入有序表的數據,利用順序表和鏈表構造分布完成兩個有序表合并功能,并輸出合并后的信息。功能描述該程序有如下幾個功能:初始化順序表初始化鏈表建立順序表尾插法建表輸出合并后的順序表輸出合并后的單鏈表合并順序表合并單鏈表調用以上的函數,實現有序表的合并概要設計或程序流程圖開場初始化鏈表初始化順序表建立順序表尾插法建表合并順序表合并單鏈表輸出完畢詳細設計void Init

11、List(SqList *&L):初始化順序表void InitList1(LinkList1 *&L):初始化鏈表void CreateList(SqList *&L,ElemType a,int n):建立順序表void CreateListR(LinkList1 *&L,ElemType a,int n):尾插法建表void DispList(SqList *L):輸出合并后的順序表void DispList1(LinkList1 *L):輸出合并后的單鏈表void UnionList(SqList *LA,SqList *LB,SqList *&LC):合并順序表void UnionL

12、ist1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC):合并單鏈表void Union():調用以上的函數,實現有序表的合并。程序模塊及其接口描述程序有以下幾個模塊:初始化、建立順序表初始化、建立鏈表輸出合并后的表合并表調試分析或程序測試有序表的合并:尚未解決的問題或改良方向缺乏:不能重復使用程序。對軟件的使用說明用戶只需根據界面的提示,采用對應的操作。4工程四(1)對設計任務容的概述建立二叉樹,層序、先序、中序、后序遍歷 用遞歸或非遞歸的方法都可以*任務:要求能夠輸入樹的各個結點,并能夠輸出用不同方法遍歷的遍歷序列;分別建立二叉樹存儲構造的的輸入函數

13、、輸出層序遍歷序列的函數、輸出先序遍歷序列的函數、輸出中序遍歷序列的函數、輸出后序遍歷序列的函數;(2)功能描述建立二叉樹輸出二叉樹先序遍歷非遞歸算法:不為空時,根-左-右,采用遞歸的方法。中序遍歷非遞歸算法:不為空時,左-根-右,采用遞歸的方法。后序遍歷非遞歸算法:不為空時,左-右-根,采用遞歸的方法。層序遍歷:運用隊列,隊列不空時,有左孩子將其入隊,有右孩子將其入隊,同時出隊。調用以上函數實現二叉樹的各種遍歷(3)概要設計或程序流程圖開場輸入二叉樹的按層結點值層次遍歷后序遍歷中序遍歷先序遍歷完畢(4)詳細設計void CreateBTNode(BTNode * &b,char *str):

14、建立二叉樹void DispBTNode(BTNode *b):輸出二叉樹void PreOrder(BTNode *b):先序遍歷非遞歸算法void InOrder(BTNode *b):中序遍歷非遞歸算法void PostOrder(BTNode *b):后序遍歷非遞歸算法void LevelOrder(BTNode *b):層序遍歷(5)程序模塊及其接口描述(6)程序的輸入與輸出描述輸入二叉樹的按層結點值;輸出二叉樹先序遍歷結點的順序;輸出二叉樹中序遍歷結點的順序;輸出二叉樹后序遍歷結點的順序;輸出二叉樹層次遍歷結點的順序;(7)調試分析或程序測試用戶從鍵盤上輸入要創立的二叉樹結點:(8

15、)尚未解決的問題或改良方向改良方向:希望能將系統改良的更為人性化,讓界面更舒適,操作更簡單。(9)對軟件的使用說明用戶只需按照界面的提示,采取相應的措施,到時界面會提醒用戶鍵盤輸入。5工程五1對設計任務容的概述猴子選大王*任務:一堆猴子都有,是1,2,3 .m ,這群猴子m個按照1-m的順序圍坐一圈,從第1開場數,每數到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。要求:輸入數據:輸入m,n m,n 為整數,nm輸出形式:中文提示按照m個猴子,數n 個數的方法,輸出為大王的猴子是幾號 ,建立一個函數來實現此功能2需求分析或功能描述為猴子out,out=p

16、asspass為密碼值,該猴子離圈,次數step+。剩下的猴子繼續次操作,直到次數step=猴子monkey時完畢。3概要設計或程序流程圖開場輸入猴子的數量和密碼值=密碼值,猴子出列,次數自增N次數=猴子數Y完畢4詳細設計或源代碼說明為猴子out,out=passpass為密碼值,該猴子離圈,次數step+。剩下的猴子繼續次操作,直到次數step=猴子monkey時完畢。函數int Monkey()實現了這一功能。5程序模塊及其接口描述運用隊列環形隊列,=密碼值 入隊;為猴子out,out=passpass為密碼值,該猴子離圈,次數step+。剩下的猴子繼續次操作,直到次數step=猴子mon

17、key時完畢。函數int Monkey()實現了這一功能。6程序的輸入與輸出描述輸入數據:輸入m,n m,n 為整數,n密碼值8尚未解決的問題或改良方向缺乏:不能重復使用程序,如果數字大的話,輸出繁瑣。9對軟件的使用說明用戶只需根據軟件界面的提示進展相關操作。結論及體會本學期,我學會了常用數據構造:數組連續空間,棧先進后出,隊列先進先出,鏈表指針,樹前驅、后繼,根、葉子,圖點、邊,堆特殊的樹,根節點的值最大或最小還有線性表存儲構造:順序存儲構造和鏈式存儲,常用的排序算法。在這一周里,自己用了CFree做了一個程序,分別實現了學生成績管理系統、各種排序、有序表的合并、二叉樹的建立及遍歷以及猴子選

18、大王,通過本次數據構造課程設計,我學習了很多課上沒弄懂的動西,穩固了關于二叉樹、棧、鏈表等知識。在設計程序時,雖然很用心的做,但還是遇到種種難題,通過上網查找資料、圖書館查閱資料、問教師的方式,最終還是解決多數,雖然最后的程序不是很完美,但是因為是通過自己的努力完成的,還是感覺很滿意,也收獲很大東西。經過了這次課程設計,現在已經可以了解很多錯誤在英文里的提示,這對我來說是一個突破性的進步,眼看著一個個錯誤通過自己的努力在我眼前消失,覺得很是開心。在這一段努力學習的過程中,我的編程設計有了明顯的提高,其實現在想起來,收獲還真是不少,雖然說以前非常不懂這門語言,在它上面花費了好多心血,覺得它很難,

19、是需用花費了大量的時間編寫出來的。現在真正的明白了一些代碼的應用,每個程序都有一些共同點,通用的構造,相似的格式。只要努力去學習,就會靈活的去應用它。總之,通過這次的課程設計,我們收獲匪淺,首先由衷感教師提供這樣的一個時機鍛煉自己,感受到學來的知識不只是用來完成試卷的。一向習慣獨立思考的自己學會了積極的與別人交流,取長補短,共同進步。課程設計使自己發現考試不是最重要的,最重要的是能運用所學的知識。在整個課程設計的學習過程中,不再是學到知識解題,而是在實際運用時遇到什么學什么,重在把知識應用于實際。附錄1:參考文獻1 數據構造教程第3版,春葆,清華大學,20102數據構造,劍,清華大學,2011

20、3數據構造(C語言版),嚴蔚敏 吳偉民,清華大學,19974Data Structures Using C數據構造C語言版,R Krishnamoorthy、G Indirani Kumaravel,清華大學,2009-95C+數據構造與程序設計 美Robert L.Kruse/Ale*ander J.Ryba著/錢麗萍譯, 清華大學,2004 6計算機算法設計與分析第2版,王曉東, 電子工業, 2004附錄2:局部源代碼清單#include #include #include#include #include #define LEN sizeof(LinkList)#define Ma*Si

21、ze 50/*/成績管理系統typedef struct LNode/*定義單鏈表結點類型*/char name10; / char num10;/* int score3; struct LNode *ne*t; LinkList;LinkList *init()return NULL; /*返回空指針*/LinkList *create()int i,s,k;int j=0;LinkList *head=NULL,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/system(cls); printf(n請輸入您想輸入的學生個數:);scanf(%d,&k);for(j=0;jnu

22、m);printf(輸入:);scanf(%s,p-name);printf(請分別輸入語文、數學、英語的分數 %d scoresn,3);/*開場輸入*/for(i=0;iscorei);if(p-scoreiscorei100) /*確保成績在0100之間*/printf(Data error,please enter again.n);while(p-scoreiscorei100);p-ne*t=head; /*將頭結點做為新輸入結點的后繼結點*/head=p; /*新輸入結點為新的頭結點*/return(head); /* 顯示全部記錄函數*/void print(LinkList

23、*head)LinkList *p; system(cls); p=head; /*初值為頭指針*/printf(n*LinkList*n);printf(n);printf(| * | | 語文 | 數學 | 英語 | n);printf(n);while(p!=NULL) printf(| %4s | %-4s | %3d | %3d | %3d |n, p-num,p-name,p-score0,p-score1,p-score2); p=p-ne*t;printf(n);printf(*END*n);/*刪除記錄函數*/LinkList *Delete(LinkList *head)L

24、inkList *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/char c,s6; /*s6用來存放*,c用來輸入字母*/system(cls); printf(請輸入要刪除的學生的*: );scanf(%s,s);p1=p2=head; /*給p1和p2賦初值頭指針*/while(strcmp(p1-num,s) & p1 != NULL) /*當記錄的*不是要找的,或指針不為空時*/p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/p1=p1-ne*t; /*將p1指針指向下一條記錄*/if(strcmp(p1-num,s)=0) /*找到了*/prin

25、tf(*FOUND*n);printf(n);printf(| * | | 語文 | 數學 | 英語 |n);printf(n);printf(| %4s | %4s | %3d | %3d | %3d |n,p1-num,p1-name,p1-score0,p1-score1,p1-score2);printf(n);printf(*END*n);printf(您確定要刪除該學生的記錄嗎 Y/N ); /*提示是否要刪除,輸入Y刪除,N則退出*/for(;)scanf(%c,&c);if(c=n|c=N) break; /*如果不刪除,則跳出本循環*/if(c=y|c=Y)if(p1=hea

26、d) /*假設p1=head,說明被刪結點是首結點*/head=p1-ne*t; /*把第二個結點地址賦予head*/elsep2-ne*t=p1-ne*t; free(p1);/*否則將一下結點地址賦給前一結點地址*/printf(n*為 %s 的學生記錄已被刪除.n,s);break; /*刪除后就跳出循環*/ else printf(n找不到*為 %s 的學生記錄.n,s); /*找不到該結點*/return(head);/插入 LinkList *Insert(LinkList *head)int k;/在表中第k個位置插入printf(請輸入插入的位置:);scanf(%d,&k);

27、 int j=0,i=0;LinkList *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/char N10,s10; /*s10用來存放,N10用來存放*/int score3; system(cls); printf(輸入*:); scanf(%s,N);printf(輸入:);scanf(%s,s);printf(請分別輸入語文、數學、英語的分數 %d scoresn,3);/*開場輸入*/for(i=0;i3;i+) /*3門課程循環3次*/doprintf(score%d:,i+1);scanf(%d,&scorei);if(scorei100) /*確保成績

28、在0100之間*/printf(Data error,please enter again.n);while(scorei100);p1=head; /*給p1賦初值頭指針*/while(jne*t; /*將p1指針指向下一條記錄*/if(p1=NULL) return 0; elsep2=(LinkList *)malloc(sizeof(LinkList);strcpy(p2-num,N);strcpy(p2-name,s);for(i=0;iscorei=scorei;p2-ne*t=p1-ne*t;p1-ne*t=p2;void menu_select()printf(nnn);pri

29、ntf(*n);printf(t Wele to n);printf(t The student score manage system n);printf(*MENU*n);printf(tt1. 輸入學生記錄n); /*輸入學生成績記錄*/printf(tt2. 輸出學生記錄n); /*顯示*/printf(tt3. 刪除學生記錄n); /*刪除*/printf(tt4. 插入一個新的學生記錄n); /*插入*/printf(tt5. 退出n); /*退出*/printf(*n);/*主函數界面*/void ScoreManage()LinkList *head,New;int i,n;h

30、ead=init(); /*鏈表初始化,使head的值為NULL*/menu_select(); do printf(ntt輸入您的選擇(15):); scanf(%d,&n);while(n5);for(;) /*循環無限次*/switch(n) case 1:head=create();break; case 2:print(head);break; case 3:head=Delete(head);break; case 4:head=Insert(head);break; case 5:return; /*如菜單返回值為9則程序完畢*/menu_select();printf(nttt

31、輸入您的選擇(15):); scanf(%d,&n);/*/各種排序typedef int KeyType; /*定義關鍵字類型*/typedef char InfoType10;typedef struct /*記錄類型*/KeyType key; /*關鍵字項*/InfoType data; /*其他數據項,類型為InfoType*/ RecType;/*排序的記錄類型定義*/void InsertSort(RecType R,int n) /*對R0.n-1按遞增有序進展直接插入排序*/int i,j;RecType tmp;for (i=1;i=0 & tmp.keyRj.key) R

32、j+1=Rj; /*將關鍵字大于Ri.key的記錄后移*/j-;Rj+1=tmp; /*在j+1處插入Ri*/void BubbleSort(RecType R,int n)int i,j,e*change;RecType tmp;for(i=0;ii;j-)if(Rj.keyRj-1.key)tmp=Rj;Rj=Rj-1;Rj-1=tmp;e*change=1;if(e*change=0) return ;void SelectSort(RecType R,int n)int i,j,k;RecType tmp;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(R

33、j.keyRk.key)k=j;if(k!=i)tmp=Ri;Ri=Rk;Rk=tmp;void disp(RecType R,int n)int i;for (i=0;in;i+)printf(%d ,Ri.key);void Sort()int i,n=10,k;RecType RMa*Size;KeyType a10;printf(請輸入排序的關鍵字(10個數字)n);for (i=0;in;i+)scanf(%d,&ai);for (i=0;idata=ch;p-lchild=p-rchild=NULL;if (b=NULL) /*p為二叉樹的根結點*/ b=p;else /*已建立二

34、叉樹根結點*/switch(k) case 1:Sttop-lchild=p;break;case 2:Sttop-rchild=p;break;j+;ch=strj;void DispBTNode(BTNode *b) if (b!=NULL)printf(%c,b-data);if (b-lchild!=NULL | b-rchild!=NULL)printf();/*有孩子結點時才輸出(*/DispBTNode(b-lchild);/*遞歸處理左子樹*/if (b-rchild!=NULL) printf(,);/*有右孩子結點時才輸出,*/DispBTNode(b-rchild);/*

35、遞歸處理右子樹*/printf();/*有孩子結點時才輸出)*/先序遍歷非遞歸算法 void PreOrder(BTNode *b)BTNode *StMa*Size,*p;int top=-1;if(b!=NULL)top+;Sttop=b;while(top-1)p=Sttop;top-;printf(%c,p-data);if(p-rchild!=NULL)top+;Sttop=p-rchild;if(p-lchild!=NULL)top+;Sttop=p-lchild;printf(%c,b);printf(n);/中序遍歷非遞歸算法void InOrder(BTNode *b)BTN

36、ode *StMa*Size,*p;int top=-1;if(b!=NULL)p=b;while(top-1|p!=NULL)while(p!=NULL)top+;Sttop=p;p=p-lchild;if(top-1)p=Sttop;top-;printf(%c,p-data);p=p-rchild;printf(n);/后序遍歷非遞歸算法void PostOrder(BTNode *b)BTNode *StMa*Size,*p;int flag,top=-1;if(b!=NULL)dowhile(b!=NULL)top+;Sttop=b;b=b-lchild;p=NULL;flag=1;

37、while(top!=-1&flag)b=Sttop;if(b-rchild=p)printf(%c,b-data);top-;p=b;elseb=b-rchild;flag=0;while(top!=-1);printf(n);/層序遍歷 void LevelOrder(BTNode *b)BTNode *p;BTNode *quMa*Size;int front,rear;front=rear=-1;rear+;qurear=b;while(front!=rear)front=(front+1)%Ma*Size;p=qufront;printf(%c,p-data);if(p-lchild

38、!=NULL)rear=(rear+1)%Ma*Size;qurear=p-lchild;if(p-rchild!=NULL)rear=(rear+1)%Ma*Size;qurear=p-rchild;void BTtree()BTNode *b;char str100;printf(輸入你要建立二叉樹的結點:);scanf(%s,str);CreateBTNode(b,str);printf(nn建立二叉樹為:);DispBTNode(b);printf(nn二叉樹b的先序遍歷序列);PreOrder(b);printf(nn二叉樹b的中序遍歷序列);InOrder(b);printf(nn

39、二叉樹b的后序遍歷序列);PostOrder(b);printf(nn二叉樹b的層次遍歷序列);LevelOrder(b);printf(nn);/*/有序表的合并typedef char ElemType; typedef struct ElemType dataMa*Size;/*存放順序表元素*/ int length;/*存放順序表的長度*/ SqList;/*順序表的類型定義*/typedef struct LNode1 /*定義單鏈表結點類型*/ElemType data;struct LNode1 *ne*t;/*指向后繼結點*/ LinkList1;void InitList(

40、SqList *&L)L=(SqList *)malloc(sizeof(SqList);/*分配存放線性表的空間*/L-length=0;void InitList1(LinkList1 *&L)L=(LinkList1 *)malloc(sizeof(LinkList1); /*創立頭結點*/L-ne*t=NULL;void CreateList(SqList *&L,ElemType a,int n)/*建立順序表*/int i;for (i=0;idatai=ai;L-length=n;void CreateListR(LinkList1 *&L,ElemType a,int n)/*

41、尾插法建立單鏈表*/LinkList1 *s,*r;int i;L=(LinkList1 *)malloc(sizeof(LinkList1); /*創立頭結點*/L-ne*t=NULL;r=L;/*r始終指向終端結點,開場時指向頭結點*/for (i=0;idata=ai;r-ne*t=s;/*將*s插入*r之后*/r=s;r-ne*t=NULL;/*終端結點ne*t域置為NULL*/void DispList(SqList *L)int i;if (L-length=0) return;for (i=0;ilength;i+)printf(%c ,L-datai);printf(n);vo

42、id DispList1(LinkList1 *L)LinkList1 *p=L-ne*t;while (p!=NULL)printf(%c ,p-data);p=p-ne*t;printf(n);/順序表存放有序表 void UnionList(SqList *LA,SqList *LB,SqList *&LC)int i=0,j=0,k=0;/*i、j、k分別作為LA、LB、LC的下標*/LC=(SqList *)malloc(sizeof(SqList);LC-length=0;while (ilength & jlength)if (LA-dataidataj)LC-datak=LA-

43、datai;i+;k+;else/*LA-dataiLB-dataj*/LC-datak=LB-dataj;j+;k+;while (ilength)/*LA尚未掃描完,將其余元素插入LC中*/LC-datak=LA-datai;i+;k+;while (jlength) /*LB尚未掃描完,將其余元素插入LC中*/LC-datak=LB-dataj;j+;k+; LC-length=k;/單鏈表存放有序表void UnionList1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC)LinkList1 *pa=LA-ne*t,*pb=LB-ne*t,*p

44、c,*s;LC=(LinkList1 *)malloc(sizeof(LinkList1);/*創立LC的頭結點*/pc=LC;/*pc始終指向LC的最后一個結點*/while (pa!=NULL & pb!=NULL)if (pa-datadata)s=(LinkList1 *)malloc(sizeof(LinkList1);/*復制*pa結點*/s-data=pa-data;pc-ne*t=s;pc=s;/*采用尾插法將*s插入到LC的最后*/pa=pa-ne*t; elses=(LinkList1 *)malloc(sizeof(LinkList1);/*復制*pb結點*/s-data

45、=pa-data;pc-ne*t=s;pc=s;/*采用尾插法將*s插入到LC的最后*/pa=pa-ne*t;while (pa!=NULL)s=(LinkList1 *)malloc(sizeof(LinkList1);/*復制*pa結點*/s-data=pa-data;pc-ne*t=s;pc=s;/*采用尾插法將*s插入到LC的最后*/pa=pa-ne*t;while (pb!=NULL)s=(LinkList1 *)malloc(sizeof(LinkList1);/*復制*pa結點*/s-data=pb-data;pc-ne*t=s;pc=s;/*采用尾插法將*s插入到LC的最后*/pb=pb-ne*t;pc-ne*t=NULL;void Union()SqList *L1,*L2,*L3;LinkList1 *L4,*L5,*L6;ElemType a5;ElemType b5;printf(a=:);scanf(%s,a);printf(b=:);scanf(%s,b);printf(順序表存放有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論