版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、算法(sun f)與數(shù)據(jù)結(jié)構(gòu)實驗(shyn)指導手冊計算機教研室2008.6第 PAGE 45 頁1實驗教學的目的(md):通過(tnggu)實驗,加深對算法(sun f)與數(shù)據(jù)結(jié)構(gòu)基本知識的理解,掌握數(shù)據(jù)結(jié)構(gòu)的理論和設計技術(shù)及其使用,培養(yǎng)學生數(shù)據(jù)結(jié)構(gòu)的設計、開發(fā)能力。2實驗教學的要求:學生每次實驗前必須根據(jù)實驗指導手冊,設計出實驗方案(程序和實驗步驟);在實驗過程中要求獨立進行程序調(diào)試和排錯,必須學會使用在線幫助解決實驗中遇到的問題,必須應用理論知識分析問題、解決問題。3實驗內(nèi)容:實驗1:VC6的使用一、實驗目的理解和掌握如何使用Visual C6.0環(huán)境編寫C/C程序。二、實驗環(huán)境裝有Vi
2、sual C6.0的計算機。本次實驗共計4學時。三、實驗內(nèi)容1、熟悉VC6環(huán)境掌握如何創(chuàng)建控制臺應用程序。掌握一些常用快捷鍵,例如編譯F7,運行CtrlF5,調(diào)試運行F5,單步運行F10/F11,設置斷點F9,格式化代碼AltF8。2、掌握如何編譯程序理解編譯過程中的錯誤信息,并掌握如何排錯。3、掌握如何調(diào)試程序掌握如何通過設置斷點來單步調(diào)試程序,如何查看當前變量的值。4、實驗(shyn)題:完成(wn chng)實驗教材的實驗題1.1、1.2、1.3。要求:實現(xiàn)該實驗結(jié)果。通過該實驗題,熟悉VC6環(huán)境下的程序編寫、編譯(biny)、調(diào)試。實驗2:順序表基本運算一、實驗目的(1)掌握順序表的各
3、種基本運算的實現(xiàn)。(2)能夠利用基本運算進行順序表的操作。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容1、順序表基本運算實現(xiàn)順序表的各種基本運算;并在此基礎上設計一個主程序,完成如下功能:初始化順序表L(元素類型為char型)依次采用尾插法插入a, b, c, d, e元素輸出順序表L輸出順序表L的長度判斷順序表L是否為空輸出順序表L的第3個元素輸出元素a 的位置在第4個元素位置上插入f元素輸出順序表L刪除順序表L的第3個元素輸出順序表釋放順序表提示:可以參考上課教材、實驗教材的實驗題2.1。2、順序(shnx)表的應用(選做)(1)設計通訊錄(也可為其他應
4、用)文件(wnjin)的存儲格式和線性表的順序存儲結(jié)構(gòu)(2)設計(shj)在通訊錄(也可為其他應用)中添加、刪除、查找某個節(jié)點信息程序(3)調(diào)試程序?qū)嶒?:單鏈表基本運算一、實驗目的(1)掌握鏈表的概念;掌握單鏈表的各種基本運算的實現(xiàn)。(2)能夠利用基本運算進行單鏈表的操作。(3)加深對鏈式存儲數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容實現(xiàn)單鏈表的各種基本運算;并在此基礎上設計一個主程序,完成如下功能:(1)初始化單鏈表L(2)依次采用尾插法插入a, b, c, d, e元素(3)輸出單鏈表L(4)輸出單鏈表
5、L的長度(5)判斷單鏈表L是否為空(6)輸出單鏈表L的第3個元素(7)輸出元素a 的位置(8)在第4個元素位置上插入f元素(9)輸出單鏈表L(10)刪除單鏈表L的第3個元素(11)輸出單鏈表L(12)釋放單鏈表L提示:可以參考上課教材、實驗教材的實驗題2.2。實驗(shyn)4:單鏈表綜合實驗一、實驗(shyn)目的(1)能夠利用(lyng)單鏈表的基本運算進行單鏈表的相關操作。(2)掌握文件的應用(3)加深對鏈式存儲數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計4學時。三、實驗內(nèi)容1、通訊錄設計設計一個班級同學的通訊錄,要求如下:
6、通訊錄中每個同學的信息包含以下內(nèi)容:學號(id)、姓名(name)、電話號碼(tel)。如果需要更多其他信息,請自行添加。程序主菜單包含以下幾個功能:添加記錄:通過鍵盤輸入信息,添加一條通訊錄記錄。刪除記錄:通過鍵盤輸入學號,刪除該學號的記錄。輸出記錄:輸出通訊錄全部記錄。按姓名查找:通過鍵盤輸入姓名,輸出該同學的所有信息。保存記錄:把通訊錄中所有的記錄保存到文件中。清空記錄:刪除通訊錄中的全部記錄,并刪除文件。退出提示:程序啟動時應判斷是否存在記錄文件,如果存在,則讀取每條記錄到鏈表中。用戶選擇并完成主菜單某功能后,除了退出程序,應該返回主菜單。添加一條記錄時,插入到鏈表的尾部。查找、刪除記
7、錄時,如果該記錄不存在,則應該輸出不存在的提示。添加記錄、刪除記錄時不需要寫文件。保存記錄時,用覆蓋寫文件的方法。(或者先刪除(shnch)原文件,再保存全部記錄信息)各個(gg)功能模塊寫成函數(shù),由主函數(shù)調(diào)用。選做:主菜單增加一個排序(pi x)功能選項,可以按照學號從小到大進行排序。排序方法可以用冒泡排序或者插入排序。實驗5:鏈棧的基本操作一、實驗目的1)熟悉棧的定義和棧的基本操作。2)掌握鏈式存儲棧的基本運算。3)加深對棧數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容必做內(nèi)容: 鏈棧的基本操作編寫棧的基本操
8、作函數(shù)棧類型的定義,數(shù)據(jù)域使用char型typedef char ElemType;typedef struct node ElemType data; struct node *next; LinkStack;2初始化空棧:函數(shù)原型如下: void InitLinkStack( LinkStack * & s)其中函數(shù)參數(shù)為LinkStack * & 類型,表示指向創(chuàng)建的空棧的指針,并且用引用方式傳入。3. 判斷是否空棧:函數(shù)原型如下:int IsEmptyLinkStack(LinkStack *s ) 其中函數(shù)參數(shù)為棧指針;返回值為int型,1表示是空棧,0表示不是空棧。4. 入棧:函數(shù)
9、(hnsh)原型如下:void PushLinkStack(LinkStack* &s , ElemType x) 其中函數(shù)參數(shù)s為棧指針(zhzhn),x為入棧的數(shù)據(jù)。 5. 出棧:函數(shù)原型(yunxng)如下:int PopLinkStack (LinkStack* & s, ElemType &x)其中函數(shù)參數(shù)s為棧指針,x為出棧的數(shù)據(jù)的引用;返回值為int型,1表示出棧成功,0表示出棧失敗。6取棧頂元素:(棧保持不變)函數(shù)原型如下:int GetLinkStackTop (LinkStack* s, ElemType &x)其中函數(shù)參數(shù)s為棧指針,x存放棧頂元素值;返回值為int型,1
10、表示成功,0表示失敗。編寫主函數(shù)調(diào)用上述函數(shù)實現(xiàn)下列操作。1初始化空棧。2. 鍵盤輸入字符,使得輸入的字符依次入棧(結(jié)束符號自定,例如回車鍵(值為10)或#) 每插入一個元素,必須輸出當時的棧頂元素(調(diào)用GetLinkStackTop函數(shù))。 3判斷鏈棧是否為空。輸出判斷結(jié)果。4調(diào)用出棧函數(shù),打印出棧元素的值;反復此步驟,直至棧為空。5判斷鏈棧是否為空。輸出判斷結(jié)果。6釋放鏈棧。選做內(nèi)容(一):判斷對稱字符串設計一個算法,調(diào)用棧的基本運算,判斷一個字符串是否為對稱字符串。若是返回1;否則返回0。例如:“abcba”和“abba”都是對稱字符串。實驗(shyn)6:隊列的基本操作一、實驗(shy
11、n)目的1)熟悉隊列(duli)的定義和隊列的基本操作。2)掌握順序循環(huán)隊列和鏈式存儲隊列的基本運算。3)加深對隊列數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容隊列的基本操作隊列的存儲結(jié)構(gòu)從順序循環(huán)隊列或者鏈隊任選一種。編寫一個程序,實現(xiàn)隊列的各種基本運算,并在此基礎上設計一個主程序,完成如下功能:初始化隊列q判斷q是否非空依次進隊元素a,b,c出隊一個元素,輸出該元素輸出隊列q的元素個數(shù)依次進隊列元素d,e,f輸出隊列q的元素個數(shù)輸出出隊序列釋放隊列實驗7:棧和隊列(duli)綜合實驗一、實驗(shyn)目的
12、(1)能夠利用棧和隊列(duli)的基本運算進行相關操作。(2)進一步熟悉文件的應用(3)加深隊列和棧的數(shù)據(jù)結(jié)構(gòu)理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計4學時。三、實驗內(nèi)容以下兩個實驗任選一個。迷宮求解設計一個迷宮求解程序,要求如下:以M N表示長方陣表示迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。能任意設定的迷宮(選作)如果有通路,列出所有通路提示:以一個二維數(shù)組來表示迷宮,0和1分別表示迷宮中的通路和障礙,如下圖迷宮數(shù)據(jù)為:1111111111100100010110010001011000011001101110000
13、110001000011010001001101110110111000000011111111111入口位置:1 1出口(ch ku)位置:8 8探索過程可采用如下(rxi)算法,設定當前位置的初值為入口位置;do 若當前(dngqin)位置可通,則將當前位置插入棧頂;若該位置是出口位置,則結(jié)束;否則切換當前位置的東鄰方塊為新的當前位置; 否則, 若棧不空且棧頂位置尚有其他方向未經(jīng)探索,則設定新的當前位置為沿順時針方向旋轉(zhuǎn)找到的棧頂位置的下一相鄰塊;若棧不空但棧頂位置的四周均不可通,則刪去棧頂位置;/從路徑中刪去該通道塊若棧不空,則重新測試新的棧頂位置,直至找到一個可通的相鄰塊出棧至棧空;w
14、hile (棧不空);2、機場飛機起降的過程模擬熟悉隊列的各種基本運算,并在此基礎上設計一個主程序,完成如下功能:模擬一個機場飛機起降的過程機場僅有一條跑道,要求起飛與降落不能同時進行進場飛機若暫時沒有跑道可用須在空中盤旋等候離場飛機若暫時沒有跑道可用須在地面排隊等候僅當空中無飛機等待降落時地面飛機方可起飛飛機的申請進場、降落、申請離場和起飛分別視為獨立事件每個事件的發(fā)生占用一個時間單位。除降落和起飛外,各事件可以同時發(fā)生提示:設定一個待飛隊列用于存放排隊等候的航班信息設定一個待降落隊列用于存放等待降落的航班信息飛機的申請進場、降落、申請離場和起飛可以通過航班事先設定的起飛時間、飛行時間長度或
15、者降落時間信息來確定,這些信息可以存放在一個文件中,程序運行時從文件中讀出。航班當前狀態(tài)可表示為:起飛,降落,申請進場,申請離場,空閑每個事件的發(fā)生占用一個時間單位可以自己約定(yudng),起飛,降落可以設定為30分鐘實驗(shyn)8:順序串的基本操作一、實驗(shyn)目的1)熟悉串的定義和串的基本操作。2)掌握順序串的基本運算。3)加深對串數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容編寫一個程序,實現(xiàn)順序串的各種基本運算,并在此基礎上設計一個主程序。具體如下:編寫棧的基本操作函數(shù)順序串類型定義如下所示:
16、typedef struct char chMAXSIZE; int len; SeqString;(1)串賦值 Assign(s,t)將一個字符串常量賦給串s,即生成一個其值等于t的串s(2)串復制 StrCopy(s,t)將串t賦給串s(3)計算串長度 StrLength(s)返回串s中字符個數(shù)(4)判斷串相等StrEqual(s,t)若兩個串s與t相等則返回1;否則返回0。(5)串連接 Concat(s,t) 返回由兩個串s和t連接在一起形成的新串。(6)求子串 SubStr(s,i,j)返回串s中從第i(1iStrLength(s)個字符開始的、由連續(xù)j個字符組成的子串。(7)插入(c
17、h r)InsStr (s,i,t)將串t插入(ch r)到串s的第i(1iStrLength(s)+1)個字符中,即將(jjing)t的第一個字符作為s的第i個字符,并返回產(chǎn)生的新串(8)串刪除 DelStr (s,i,j)從串s中刪去從第i(1iStrLength(s)個字符開始的長度為j的子串,并返回產(chǎn)生的新串。(9)串替換 RepStr (s,s1,s2)在串s中,將所有出現(xiàn)的子串s1均替換成s2。(10)輸出串DispStr(s)輸出串s的所有元素值(11)判斷串是否為空 IsEmpty(s)編寫主函數(shù)調(diào)用上述函數(shù)實現(xiàn)下列操作:建立串s=“abcdefghijklmn”,串s1=“x
18、yz”,串t“hijk”復制串t到t1,并輸出t1的長度在串s的第9個字符位置插入串s1而產(chǎn)生串s2,并輸出s2刪除s第2個字符開始的5個字符而產(chǎn)生串s3,并輸出s3將串s第2個字符開始的3個字符替換成串s1而產(chǎn)生串s4,并輸出s4提取串s的第8個字符開始的4個字符而產(chǎn)生串s5,并輸出s5將串s1和串t連接起來而產(chǎn)生串s6,并輸出s6比較串s1和s5是否相等,輸出結(jié)果實驗(shyn)9:矩陣的基本操作一、實驗(shyn)目的1)熟悉數(shù)組、矩陣(j zhn)的定義和基本操作。2)掌握對稱矩陣、稀疏矩陣等特殊矩陣的存儲方式和基本運算。3)加深對數(shù)組、矩陣的理解,逐步培養(yǎng)解決實際問題的編程能力。二、
19、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容以下兩個實驗任選一個。1、實現(xiàn)稀疏矩陣的轉(zhuǎn)置、求和假設mn的稀疏矩陣用三元組表示,編寫一個程序?qū)崿F(xiàn)如下功能:生成如下兩個稀疏矩陣的三元組a和b,并輸出三元組表示。1 0 3 00 1 0 00 0 1 00 0 1 03 0 0 00 4 0 00 0 1 00 0 0 2提示:程序中可以用int A44和B44二維數(shù)組表示原始矩陣A和B。輸出a的轉(zhuǎn)置矩陣的三元組表示。設cab,輸出c的三元組表示。2、求對稱矩陣之和、乘積已知A和B為兩個nn階的對稱矩陣,編寫一個程序?qū)崿F(xiàn):將其下三角元素存儲在一維數(shù)組a和b中,并輸出。
20、1 1 2 41 2 3 52 3 4 64 5 6 71 1 1 11 1 1 11 1 1 11 1 1 1提示:程序中可以(ky)用int A44和B44二維數(shù)組表示原始矩陣A和B。設CAB,以矩陣方式(fngsh)輸出C。設DAB,以矩陣方式(fngsh)輸出D。實驗10:字符串綜合實驗一、實驗目的1)熟悉串的定義和串的基本操作。2)加深對串數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次(bn c)實驗共計4學時。三、實驗(shyn)內(nèi)容以下兩個實驗任選一個。1、凱撒加密算法凱撒密碼(caeser)是羅馬擴張時期朱利斯凱
21、撒(Julius Caesar)創(chuàng)造的,用于加密通過信使傳遞的作戰(zhàn)命令。它將字母表中的字母移動一定位置而實現(xiàn)加密。他的原理很簡單,說到底就是字母與字母之間的替換。每一個字母按字母表順序向后移3位,如a加密后變成d,b加密后變成e,x加密后變成a,y加密后變成b,z加密后變成c。例如:“baidu”用凱撒密碼法加密后字符串變?yōu)椤癳dlgx”。試寫一個算法,將鍵盤輸入的文本字符串(只包含az的字符)進行加密后輸出。另寫一個算法,將已加密后的字符串解密后輸出。提示:如果有字符變量c加密后則a(c-a3)26采用順序結(jié)構(gòu)存儲串,鍵盤輸入字符串后保存到順序串中;輸出用順序串的輸出函數(shù)。2、求一個串中出現(xiàn)
22、的第一個最長重復子串采用順序結(jié)構(gòu)存儲串,編寫一個程序,求串s中出現(xiàn)的第一個最長重復子串的下標和長度。實驗11:遞歸綜合實驗一、實驗目的1)熟悉遞歸的定義和遞歸的算法設計。2)加深對遞歸算法的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次(bn c)實驗共計4學時。三、實驗(shyn)內(nèi)容以下兩個實驗任選一個。1、求解n皇后問題編寫一個程序,求解皇后問題:在nn的方格棋盤上,放置n個皇后,要求每個皇后不同行、不同列、不同對角線。要求:使用遞歸算法求解;皇后的個數(shù)n由用戶輸入,其值不能超過20。2、求解漢諾塔問題設有3個分別命名為X,Y和Z的
23、塔座,在塔座X上有n個直徑各不相同,從小到大依次編號為1,2,n的盤片,現(xiàn)要求將X塔座上的n個盤片移到塔座Z上并仍按同樣順序疊放,盤片移動時必須遵守以下規(guī)則:每次只能移動一個盤片;盤片可以插在X,Y和Z中任一塔座;任何時候都不能將一個較大的盤片放在較小的盤片上。設計遞歸求解算法。要求:使用遞歸算法求解;盤片的個數(shù)n由用戶輸入,其值不能超過12。實驗12:二叉樹的操作一、實驗目的1)熟悉二叉樹樹的基本操作。2)掌握二叉樹的實現(xiàn)以及實際應用。3)加深二叉樹的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計(n j)4學時。三、實驗(sh
24、yn)內(nèi)容1、二叉樹的基本操作【問題描述】現(xiàn)需要編寫一套二叉樹的操作函數(shù),以便用戶能夠方便的利用這些函數(shù)來實現(xiàn)自己的應用。其中操作函數(shù)包括:創(chuàng)建二叉樹CreateBTNode(*b,*str):根據(jù)二叉樹括號表示法的字符串*str生成對應的鏈式存儲結(jié)構(gòu)。輸出二叉樹DispBTNode(*b):以括號表示法輸出一棵二叉樹。查找結(jié)點FindNode(*b,x):在二叉樹b中尋找data域值為x的結(jié)點,并返回指向該結(jié)點的指針。求高度BTNodeDepth(*b):求二叉樹b的高度。若二叉樹為空,則其高度為0;否則,其高度等于左子樹與右子樹中的最大高度加l。求二叉樹的結(jié)點個數(shù)NodesCount(BT
25、Node *b)先序遍歷的遞歸算法:void PreOrder(BTNode *b) 中序遍歷的遞歸算法:void InOrder(BTNode *b) 后序遍歷遞歸算法:void PostOrder(BTNode *b) 層次遍歷算法void LevelOrder(BTNode *b)【基本要求】實現(xiàn)以上9個函數(shù)。主函數(shù)中實現(xiàn)以下功能:創(chuàng)建下圖中的樹b輸出二叉樹b找到H節(jié)點,輸出其左右孩子值輸出b的高度輸出b的節(jié)點個數(shù)輸出b的四種遍歷順序ABDCEHJKLMNFGI【實驗(shyn)提示】數(shù)據(jù)結(jié)構(gòu)(sh j ji u)的定義:#include #include #define MaxSize
26、 100typedef char ElemType;typedef struct nodeElemType data;/*數(shù)據(jù)(shj)元素*/struct node *lchild;/*指向左孩子*/struct node *rchild;/*指向右孩子*/ BTNode;各個函數(shù)的定義:void CreateBTNode(BTNode *&b,char *str);BTNode *FindNode(BTNode *b,ElemType x);int BTNodeDepth(BTNode *b);void DispBTNode(BTNode *b);int NodesCount(BTNode
27、 *b);void PreOrder(BTNode *b);void InOrder(BTNode *b);void PostOrder(BTNode *b);void TravLevel(BTNode *b);主函數(shù)的結(jié)構(gòu):void main()BTNode *b,*p,*lp,*rp;char str=A(B(D,E(H(J,K(L,M(,N),C(F,G(,I);CreateBTNode(b,str); printf(n);printf(輸出(shch)二叉樹:);DispBTNode(b);printf(n);printf(H結(jié)點(ji din):);p=FindNode(b,H);i
28、f (p!=NULL)/此處輸出p的左右(zuyu)孩子節(jié)點的值printf(n);printf(二叉樹b的深度:%dn,BTNodeDepth(b);printf(二叉樹b的結(jié)點個數(shù):%dn,NodesCount(b);printf(n);printf( 先序遍歷序列:n);printf( 遞歸算法:);PreOrder(b);printf(n);printf( 中序遍歷序列:n);printf( 遞歸算法:);InOrder(b);printf(n);printf( 后序遍歷序列:n);printf( 遞歸算法:);PostOrder(b);printf(n);printf( 層次遍歷序列
29、:); printf(n);TravLevel(b); printf(n);2.2 二叉樹的線索化【問題描述】編寫一個程序,實現(xiàn)中序線索化二叉樹,輸出線索中序序列?!净疽蟆坑蒙蠄D的二叉樹b來驗證你的程序?!緦嶒炋崾尽繑?shù)據(jù)結(jié)構(gòu)的定義:#include #include #define MaxSize 100typedef char ElemType;typedef struct node ElemType data;int ltag,rtag; /*增加的線索標記*/struct node *lchild;struct node *rchild; TBTNode;TBTNode *pre;各
30、個(gg)函數(shù)的定義:void CreateTBTNode(TBTNode * &b,char *str)void DispTBTNode(TBTNode *b)void Thread(TBTNode *&p)TBTNode *CreaThread(TBTNode *b) /*中序線索(xin su)化二叉樹*/void ThInOrder(TBTNode *tb)主函數(shù)(hnsh)的結(jié)構(gòu):void main()TBTNode *b,*tb;CreateTBTNode(b,A(B(D,E(H(J,K(L,M(,N),C(F,G(,I); printf( 二叉樹:);DispTBTNode(b)
31、;printf(n);tb=CreaThread(b);printf( 線索中序序列:);ThInOrder(tb);printf(n);3實驗結(jié)果此處填寫程序運行結(jié)果。4實驗心得此處填寫你的實驗心得體會。實驗13:哈夫曼編碼一、實驗目的1)熟悉哈夫曼樹的基本操作。2)掌握(zhngw)哈夫曼編碼(bin m)的實現(xiàn)以及實際應用。3)加深(jishn)對哈夫曼樹、哈夫曼編碼的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗環(huán)境裝有Visual C6.0的計算機。本次實驗共計4學時。三、實驗內(nèi)容【問題描述】利用哈夫曼編碼進行通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。但是,這要求發(fā)
32、送端通過一個編碼系統(tǒng)對數(shù)據(jù)進行編碼,在接受端將傳來的數(shù)據(jù)進行譯碼。試為這樣的信息收發(fā)站寫一個哈夫曼編碼/譯碼系統(tǒng)?!净疽蟆勘鞠到y(tǒng)應實現(xiàn)以下功能:(功能13必做,4為選做,請課后自行完成)初始化:字符集(字母az,空格)共27個字符,以及其權(quán)值。建立哈夫曼樹。并建立各個字符的哈夫曼編碼。打印字符集的哈夫曼編碼。編碼:從終端讀入字符串,實現(xiàn)該字符串的編碼。譯碼:實現(xiàn)剛才生成的哈夫曼編碼還原為字符串。(選做)【已知條件】(1)字符集的權(quán)值如下表:【實驗提示】數(shù)據(jù)結(jié)構(gòu)的定義:#define N 50/*葉子結(jié)點數(shù)*/#define M 2*N-1/*樹中結(jié)點總數(shù)*/typedef structch
33、ar data;/*結(jié)點(ji din)值*/int weight;/*權(quán)重(qun zhn)*/int parent;/*雙親(shungqn)結(jié)點*/int lchild;/*左孩子結(jié)點*/int rchild;/*右孩子結(jié)點*/ HTNode;typedef structchar cdN;/*存放哈夫曼碼*/int start; HCode;各個函數(shù)的定義:void CreateHT(HTNode ht,int n)/*創(chuàng)建哈夫曼樹*/void CreateHCode(HTNode ht,HCode hcd,int n)/*創(chuàng)建哈夫曼編碼*/void DispHCode(HTNode h
34、t,HCode hcd,int n)/*顯示各個字符的哈夫曼編碼*/void Encode(char *s,HTNode ht,HCode hcd,int n) /*顯示字符串s的哈夫曼編碼*/主函數(shù)的結(jié)構(gòu):char str= ,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; /*字符集*/int fnum=186,64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1; /*字符集對應的權(quán)值*/CreateHT();CreateHCode();D
35、ispHCode();gets(s);Encode();實驗14:圖的存儲和遍歷一、實驗目的1)熟悉圖的基本操作。2)掌握圖的存儲(cn ch)實現(xiàn)以及遍歷操作。3)加深對圖的理解(lji),逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容【基本要求】1、用鄰接矩陣存儲方式,表示下面的圖,并輸出。2、由上面的鄰接矩陣產(chǎn)生鄰接表,并輸出。3、編程完成從頂點0開始的深度優(yōu)先遍歷和廣度優(yōu)先遍歷?!据敵鼋Y(jié)果】輸出結(jié)果例子如下:有向圖G的鄰接矩陣: 0 5 0 7 0 0 0 0 4 0 0 0 8 0 0 0 0 9 0 0
36、5 0 0 6 0 0 0 5 0 0 3 0 0 0 1 0 圖G的鄰接矩陣轉(zhuǎn)換成鄰接表: 0: 1 3 1: 2 2: 0 5 3: 2 5 4: 3 5: 0 4從頂點0開始的DFS: 0 1 2 5 4 3從頂點0開始的BFS: 0 1 3 2 5 4【提示(tsh)】#include #include #defineMAXV 100/*最大頂點(dngdin)個數(shù)*/#define INF 32767 /*INF表示(biosh)*/typedef int InfoType;/*以下定義鄰接矩陣類型*/typedef struct int no;/*頂點編號*/InfoType in
37、fo;/*頂點其他信息*/ VertexType;/*頂點類型*/typedef struct /*圖的定義*/ int edgesMAXVMAXV; /*鄰接矩陣*/ int vexnum,arcnum; /*頂點數(shù),弧數(shù)*/VertexType vexsMAXV;/*存放頂點信息*/ MGraph;/*圖的鄰接矩陣類型*/*以下定義鄰接表類型*/typedef struct ANode /*弧的結(jié)點結(jié)構(gòu)類型*/int adjvex; /*該弧的終點位置*/ struct ANode *nextarc; /*指向下一條弧的指針*/ InfoType info; /*該弧的相關信息,這里用于存
38、放權(quán)值*/ ArcNode;typedef int Vertex;typedef struct Vnode /*鄰接(ln ji)表頭結(jié)點的類型*/Vertex data; /*頂點(dngdin)信息*/ ArcNode *firstarc; /*指向(zh xin)第一條弧*/ VNode;typedef VNode AdjListMAXV;/*AdjList是鄰接表類型*/typedef struct AdjList adjlist; /*鄰接表*/ int n,e; /*圖中頂點數(shù)n和邊數(shù)e*/ ALGraph; /*圖的鄰接表類型*/int visitedMAXV;/*全局數(shù)組*/v
39、oid MatToList(MGraph,ALGraph *&);/*鄰接矩陣轉(zhuǎn)為鄰接表*/void DispMat(MGraph);/*輸出鄰接矩陣*/void DispAdj(ALGraph *);/*輸出鄰接表*/void DFS(ALGraph *G,int v);/*深度優(yōu)先遍歷*/void BFS(ALGraph *G,int v);/*廣度優(yōu)先遍歷*/void main()int i,j;MGraph g;ALGraph *G;int AMAXV6=0,5,0,7,0,0,0,0,4,0,0,0,8,0,0,0,0,9,0,0,5,0,0,6,0,0,0,5,0,0,3,0,0,
40、0,1,0;g.vexnum=6;g.arcnum=10;for (i=0;ig.vexnum;i+)for (j=0;jg.vexnum;j+)g.edgesij=Aij;printf(n);printf( 有向圖G的鄰接矩陣:n);DispMat(g);G=(ALGraph *)malloc(sizeof(ALGraph);printf( 圖G的鄰接矩陣轉(zhuǎn)換成鄰接表:n);MatToList(g,G);DispAdj(G);printf(n);printf(從頂點0開始的DFS:n);DFS(G,0);printf(n);printf(從頂點(dngdin)0開始的BFS:n);BFS(G
41、,0);printf(n);void MatToList(MGraph g,ALGraph *&G)/*將鄰接(ln ji)矩陣g轉(zhuǎn)換成鄰接表G*/*輸入(shr)代碼*/void DispMat(MGraph g)/*輸出鄰接矩陣g*/*輸入代碼*/void DispAdj(ALGraph *G)/*輸出鄰接表G*/*輸入代碼*/void DFS(ALGraph *G,int v) /*輸入代碼*/void BFS(ALGraph *G,int v) /*輸入代碼*/實驗15:Prim算法求最小生成樹一、實驗目的1)熟悉圖的基本操作。2)掌握利用(lyng)Prim算法求圖的最小生成樹。3)
42、加深對圖的理解,逐步培養(yǎng)(piyng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容【基本要求】編寫一個程序,對于如下的無向帶權(quán)圖,利用Prim算法輸出從頂點0出發(fā)的最小生成樹。實驗16:圖綜合實驗一、實驗目的1)熟悉圖的基本操作。2)掌握求圖的最短路徑算法。3)加深對圖的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計(n j)4學時。三、實驗(shyn)內(nèi)容【基本要求】給定n個村莊之間的交通圖。若村莊i和j之間有路可通,則i和j用邊連接,邊上的權(quán)值Wij表示這
43、條道路的長度?,F(xiàn)打算在這n個村莊中選定一個村莊建一所醫(yī)院。編寫如下算法:求出該醫(yī)院應建在哪個村莊,才能使距離醫(yī)院最遠的村莊到醫(yī)院的路程最短。求出該醫(yī)院應建在哪個村莊,能使其它所有村莊到醫(yī)院的路徑總和最短?!咎崾尽繉τ趩栴}(1),可以先求出每個村莊到其它所有村莊的最短路徑,保存其最大值(表示假設醫(yī)院建在該村莊,距離醫(yī)院最遠的村莊的路徑長度);然后在這些最大值中找出一個最小值。對于問題(2),可以先求出每個村莊到其它所有村莊的最短路徑,保存其累加和(表示假設醫(yī)院建在該村莊,其它所有村莊距離醫(yī)院的路徑總和);然后在這些和中找出一個最小值。自己設定n個村莊的交通圖。例如下圖所示:實驗17:線性查找一、
44、實驗目的1)熟悉查找的基本操作。2)掌握線性查找(順序(shnx)查找、二分查找)的實現(xiàn)。3)加深對查找的理解,逐步培養(yǎng)(piyng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計2學時。三、實驗內(nèi)容1、順序查找編寫一個程序,輸出在順序表中3,6,2,10,1,8,5,7,4,9 中采用順序查找的方法查找關鍵字5的過程。2、二分查找【基本要求】編寫一個程序,輸出在順序表中1,2,3,4,5,6,7,8,9,10中采用二分查找法查找關鍵字9的過程。【輸出結(jié)果】輸出結(jié)果例子如下:第1次查找:在0,9中查找到元素R4:5第2次查找:在5,9中查找到元
45、素R7:8第3次查找:在8,9中查找到元素R8:9元素9的位置是8實驗18:哈希查找一、實驗目的1)熟悉查找的基本操作。2)掌握哈希查找的實現(xiàn)。3)加深對查找的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次實驗共計(n j)2學時。三、實驗(shyn)內(nèi)容【基本要求】編寫一個程序,實現(xiàn)哈希表的相關運算,并在此基礎上完成如下功能:建立16,74,60,43,54,90,46,31,29,88,77哈希表A0.12,哈希函數(shù)為H(k)=key%p,(p取13),并采用線性探查法解決沖突。在上述哈希表中查找關鍵字為29的記錄。在上述哈希表中刪除
46、關鍵字為77的記錄,再將其插入。【輸出結(jié)果】輸出結(jié)果例子如下:哈希表地址: 0 1 2 3 4 5 6 7 8 9 10 11 12 哈希表關鍵字: 77 54 16 43 31 29 46 60 74 88 90 搜索次數(shù): 2 1 1 1 1 4 1 1 1 1 1 平均搜索長度ASL(11)=1.36364 ha6.key=29 刪除關鍵字77 哈希表地址: 0 1 2 3 4 5 6 7 8 9 10 11 12 哈希表關鍵字: 54 16 43 31 29 46 60 74 88 90 搜索次數(shù): 1 1 1 1 4 1 1 1 1 1 平均搜索長度ASL(10)=1.3 未找到77
47、 插入關鍵字77 哈希表地址: 0 1 2 3 4 5 6 7 8 9 10 11 12 哈希表關鍵字: 77 54 16 43 31 29 46 60 74 88 90 搜索次數(shù): 2 1 1 1 1 4 1 1 1 1 1 平均搜索長度ASL(11)=1.36364實驗19:查找綜合實驗一、實驗目的1)熟悉查找的基本操作。2)掌握二叉排序樹的基本運算。3)加深對查找的理解,逐步培養(yǎng)解決實際問題的編程能力。二、實驗(shyn)環(huán)境裝有Visual C6.0的計算機。本次(bn c)實驗共計4學時。三、實驗(shyn)內(nèi)容1、統(tǒng)計字符串中字符出現(xiàn)的次數(shù)編寫一個程序,由鍵盤輸入一個字符串,統(tǒng)計該字符串中出現(xiàn)的字符及其次數(shù)。然后輸出結(jié)果。要求用一個二叉樹來保存處理結(jié)果,字符串中每個不同的字符用樹的結(jié)點表示,結(jié)點應該包含四個域:該字符、該字符出現(xiàn)的次數(shù)、左子樹指針、右子樹指針;其中左子樹的字符的ASCII碼均小于該字符,右子樹的字符的ASCII碼均大于該字符。提示:從字符串中依次讀取字符,在二叉樹中查找該字符是否存在。如果存在,則該字符的出現(xiàn)次數(shù)加1;如果不存在,則按照二叉
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 1《白鷺》說課稿-2024-2025學年統(tǒng)編版語文五年級上冊
- 2025技術(shù)咨詢合同書
- 2025大連市住宅小區(qū)物業(yè)管理委托合同
- 2024年五年級品社下冊《同是炎黃子孫》說課稿 山東版001
- 5《玲玲的畫》說課稿-2024-2025學年語文二年級上冊統(tǒng)編版
- 2023二年級數(shù)學下冊 6 有余數(shù)的除法第5課時 解決問題(1)說課稿 新人教版
- 27我的伯父魯迅先生(說課稿)-2024-2025學年六年級上冊語文統(tǒng)編版001
- 2024-2025學年高中地理下學期第4周說課稿(世界的自然資源)
- 2023三年級數(shù)學上冊 一 動物趣聞-克、千克、噸的認識 信息窗2噸的認識說課稿 青島版六三制
- 蕪湖廠房推拉棚施工方案
- 《農(nóng)機化促進法解讀》課件
- 最高法院示范文本發(fā)布版3.4民事起訴狀答辯狀示范文本
- 2024年英語高考全國各地完形填空試題及解析
- 2024至2030年中國餐飲管理及無線自助點單系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2024年燃氣輪機值班員技能鑒定理論知識考試題庫-下(多選、判斷題)
- 2024年服裝門店批發(fā)管理系統(tǒng)軟件項目可行性研究報告
- (優(yōu)化版)高中地理新課程標準【2024年修訂版】
- 《Python程序設計》課件-1:Python簡介與應用領域
- 體育概論(第二版)課件第三章體育目的
- 《氓》教學設計 2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
- 化學元素周期表注音版
評論
0/150
提交評論