資料結構 課程設計題 2019

2021-08-01 21:22:37 字數 5306 閱讀 4033

一、題目的選擇方法

根據學號進行對應題目的選擇,即學號的後2位除以17取餘數,所得餘數即為該同學所選題號。

二、《資料結構》課程設計可供選擇的題目

1、 huffman編碼的應用

建立乙個文字檔案,通過統計該檔案中各字元出現的頻率,對各字元進行huffman編碼,(1)能夠實現將該檔案轉換成huffman編碼檔案儲存(壓縮),(2)能夠實現將huffman編碼檔案還原成原檔案(解壓)。

2、鍊錶的應用

以有序的單鏈表結構來描述超市家電部的庫存模型。當有提貨或進貨時需要對該鍊錶及時進行維護。每個工作日結束之後,將該鍊錶中的資料以檔案形式儲存,每日開始營業之前,需將以檔案形式儲存的資料恢復成煉表結構的有序表。

鍊錶結點的資料域包括家電名稱、品牌、單價和數量,以單價的公升序體現鍊錶的有序性。程式功能包括:初始化、建立表、插入、刪除、更新資料,查詢及鍊錶資料與檔案之間的轉換等。

3、hash表的應用

掃瞄乙個c語言源程式,用hash表儲存該程式中出現的關鍵字,並統計該程式中的關鍵字出現的頻率。

4、圖的應用

n(n>10)個居民之間需要鋪設煤氣管道。假設任意兩個居民之間都可以鋪設煤氣管道,但代價不同。事先將任意兩個居民之間鋪設煤氣管道的代價存入磁碟檔案中。

設計乙個最佳方案使得這n個居民之間鋪設煤氣管道所需代價最少。

5、模式匹配演算法的應用

利用字串匹配的kmp演算法,實現對文字檔案的查詢與替換功能。

6、joseph環

約瑟夫環(joseph)問題的一種描述是:編號為1、2、3……n的n個人按照順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按照順時針的方向自1開始順序報數,報到m時停止報數。

報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個人開始重新從1報數,如此下去,直至所有人全部出列為止。試設計乙個程式求出出列順序。

[基本要求]

利用順序表、單向迴圈鍊錶兩種儲存結構模擬此過程,按照出列的順序依次輸出每個人的編號。

[測試資料]

m的初值為20,n=7,7個人的密碼依次為:3、1、7、2、4、8、4,首先m值為6(正確的出列順序應為6、1、4、7、2、3、5)。

[實現提示]

程式執行後,首先要求使用者指定初始報數上限值,然後讀取個人的密碼。可設n≤30。此題所用的迴圈鍊錶中不需要「頭結點」,請注意空表和非空表的界限。

7、長整數四則運算

[問題描述]

設計乙個實現任意長的整數進行加法運算的演示程式

[基本要求]

利用雙向迴圈鍊錶實現長整數的儲存,每個節點包含乙個整型變數。任何整型變數的範圍是-(215-1)~215-1,輸入輸出形式:按照中國對於長整數的表示習慣,每四位一組,組間用逗號分開。

[測試資料]

(1)0;0;應輸入「0」

(2)-2345,6789;-7654,3211;應輸出」-1,0000,0000」

(3)1,0001,0001;-1,0001,0001;應輸出0。

[實現提示]

每個結點中可以存放的最大整數為215-1=32767,才能保證兩數相加不會溢位。但若這樣存放,即相當於按32767進製數存放,在十進位制數與32767進製數之間的轉換十分不便。故可以在每個節點中僅存放十進位制數的4位,即不超過9999的非負整數,整個鍊錶表示為萬進製數。

可以利用頭節點的資料域的符號代表長整數的符號。相加過程中不要破壞兩個運算元鍊錶。不能給長整數字數規定上限。

8、棧的應用一

表示式計算是實現程式語言的基本問題之一。也是棧的應用的乙個典型例子。設計乙個程式,演示用算符優先法或轉換成字尾表示式方法對算術表示式進行求值的過程。

[基本要求]

以字串行的形式從終端輸入語法正確的、不含變數的整數表示式。利用算符優先關係,或中綴表示式向字尾表示式轉換的方法,實現對算術四則混合運算表示式的求值,並仿照教科書和課件中的例子演示求值中運算子棧、運算數棧、輸入字元和主要操作變化的過程。

[測試資料]

3*(7-2)

8;1+2+3+4;88-1*5;1024/4*8;(6+2*(3+6*(6+6)))

9、二分法查詢的應用

分塊查詢又稱為索引順序查詢,是順序查詢的一種改進方法。除了表自身之外,尚需建立乙個「索引表」,為每乙個子表建立乙個索引項,其中包括兩項內容,關鍵字(子表內的最大關鍵字)項和指標項(子表中第乙個記錄在表中的位置)。索引表按關鍵字排序,子表分塊有序,查詢時先確定待查記錄所在的塊,然後在塊內查詢。

由於索引項是按照關鍵字排序的,所以在索引表中的查詢可以採用二分查詢方法。

[基本要求]

(1) 將學生按照班級進行分類,同一班級的學生記錄在乙個子表中。

(2) 索引表中存放班級的名稱,並按照名稱進行排序。

(3) 乙個班級的學生記錄可以不按照順序存放。

[測試資料]

自行設定。

[實現提示]

(1) 可假設要儲存的班級數最多為20個,乙個班級最多有30個學生。

(2) 所有班級的學生記錄都存放在同乙個連續的儲存空間中。每個班級學生記錄儲存的起始位置固定。

(3) 索引表另行建立,用於儲存每個班級的學生在子表中儲存的起始位置和人數。

10、雜湊表的設計

針對你所在的集體(比如你所在的班級)中的人名設計乙個雜湊表,使得平均查詢長度不超過r,完成相應的建表和查表的程式。

[基本要求]

假設人名為中國人姓名的漢語拼音形式,待填入的雜湊表的人名共有30個,取平均查詢長度的上限為2。雜湊函式用除留餘數方法構造,用偽隨機探測再雜湊處理衝突。

[測試資料]

取你周圍熟悉的30個人的姓名。

[實現提示]

如果隨機函式自行構造,則應首先調整好隨機函式,使其分布均勻。人名的長度均不超過19個字元,最長的人名如:莊雙雙(zhuang shuangshuang)。

字元的取碼方法可直接利用c語言中的toascii函式,並可對過長的人名先作摺疊處理。

11、二叉排序樹的應用

使用二叉排序樹進行表的建立和查詢演算法。

[基本要求]

將自己的聯絡人按照聯絡人的**號碼關鍵字建立二叉排序樹,並實現在建立的二叉排序樹上進行查詢操作。聯絡人的資訊可以有:姓名、性別、出生年月日、家庭住址和另乙個聯絡**等資訊。

[測試資料]

自行設定。

12、多關鍵字排序的應用

多關鍵字的排序有一定的實用範圍。例如:在即行高考分數的處理時,除了需對總分進行排序外,不同的專業對單科分數的要求不同,因此上需在總分相同的情況下,按使用者提出的單科分數的次序要求排出考生錄取的順序。

[基本要求]

(1)假設待排序的記錄不超過10,000,表中記錄的關鍵字不超過5個,各個關鍵字的範圍均為0至100。按照使用者給定的進行排序的關鍵字的優先關係,輸出排序的結果。

(2)約定按照lsd(最低位優先法,least significant digit first,簡稱lsd法。)進行多關鍵字的排序。在對各個關鍵字進行排序時採用兩種策略:

其一是利用穩定的內部排序演算法,其二是利用「分配」和「收集」的方法。並綜合比較這兩種策略。

[測試資料]

由隨機數產生器產生。

[實現提示]

用5~8組資料比較不同排序策略所需要的時間。

由於是按lsd方法進行排序,則對於每乙個關鍵字均可進行整個序列的排序,但在利用通常的內部排序演算法進行排序時,必須選用穩定的排序演算法。借助「分配」和「收集」策略進行的排序,如同一趟「基數排序」,由於關鍵字的取值範圍為0至100,則分配時使得到101個鍊錶。

13、排序演算法的比較

在教科書中,各種排序演算法的時間複雜度分析結果只給出了演算法執行時間的階,或大概執行時間。試通過隨機資料比較各演算法的關鍵字比較次數和關鍵字比較次數和關鍵字移動次數,以取得直觀感受。

[基本要求]

(1) 對以下四種常用的內部排序演算法進行比較:起泡排序、直接插入排序、簡單選擇排序和歸併排序。

(2) 待排序的表長不小於100,其中的資料要用偽隨機數程式產生;至少要用5組不同的輸入資料做比較;比較的指標有關鍵字參加的比較次數和關鍵字的移動次數(關鍵字交換記為3次移動)。

(3) 最後要對結果做出簡單分析,包括對各組資料得出結果波動大小的解釋。

[測試資料]

由隨機數產生器生成。

[實現提示]

主要的工作是設法在已知演算法中的適當位置插入對關鍵字的比較次數和移動次數的計數操作。程式還可以考慮幾組資料的典型性,如:正序、逆序和不同程度的亂序。注意採用分塊除錯的方法。

14、重言式判別問題

乙個邏輯表示式如果對於其變元的任一種取值均為真,則成為重言式;反之,如果對於其變元的任一種取值都為假,則稱為矛盾式,然而,更多的情況下,既非重言式,也非矛盾式。試寫乙個程式,通過真值表判別乙個邏輯表示式屬於上述哪一類。,

[基本要求]

(1) 邏輯表示式從終端輸入,長度不超過一行。邏輯運算子包括「|」、「&」和「~」,分別表示或、與和非,運算優先程度遞增,但可有括號改變,即括號內的運算優先。邏輯變元為大寫字母。

表示式中任何地方都可以含有多個空格符。

(2) 若是重言式或矛盾式,可以只顯示「true forever」或「false forever」,否則顯示「satisfactible」以及變數名序列,與使用者互動。若使用者對表示式變元取定一組值,程式就求出並顯示邏輯表示式的值。

[測試資料]

(1)(a|~a)&(b|~b)

(2)(a&~a)&c

(3)a|b|c|d|e|~a

[實現提示]

(1) 識別邏輯表示式的符號形式並建立二叉樹可以有兩種策略:自底向上的算符優先法和自頂向下分割,先序遍歷建立二叉樹的方法。

(2) 可設表示式中邏輯變數數不超過20。真值的產生可以通過在一維陣列上維護乙個「軟計數器」實現,用遞迴演算法實現更簡單。

15、棧的應用二—停車場管理問題

[問題描述]

設停車場是乙個可停放n輛汽車的下狹長通道,且只有乙個大門可供汽車進出,汽車在停車場內按車輛到達的時間先後排序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車廠的最北端),若車場內已停滿n輛汽車,則後來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之後進入的車輛必須先退出車場為它讓路,待該車開出大門外,其他車輛再按照原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制上述要求的管理模擬程式。

[基本要求]

以棧模擬停車場,以佇列模擬車場外的便道,按照從終端輸入的資料序列進行模擬管理。每一組輸入資料報括三個資料項:汽車「達到」或「離去」資訊、汽車牌照號碼以及到達或離去的時刻。

對每一組輸入資料進行操作後的輸出資訊為:若是車輛到達,則輸入汽車在停車場內或便道上的停車位置;若是車輛到達,則輸出汽車在停車場內或便道上的停車位置,若是車輛離去,則輸出在汽車在停車場內停留的時間和應繳納的費用(在便道上停留的時間不收費)。棧以順序結構實現,佇列以鍊錶結構實現。

資料結構課程設計

指導書山東建築大學 電腦科學與技術學院 二 六年十二月 課程設計基本情況 課程名稱 資料結構課程設計 相關課程 c語言程式設計 visual c 程式設計 資料結構 適合專業 電腦科學與技術 網路工程 軟體工程 設計週數 2周 學分 2學分 開課學期 第4學期 開課單位 電腦科學與技術學院 一 課程...

資料結構課程設計

總結報告 專業軟體工程 班級軟體1007 學號 20103540 姓名 日期 2012.9.17 東北大學軟體學院 第一章需求分析 問題定義 實現乙個網上拍賣系統,根據需求描述和附加的框架 完成乙個網上拍賣系統。分析 整個系統執行於windows平台,是基於b s結構的商業應用程式,程式為使用者提供...

資料結構課程設計

環境與測繪學院 1 c 物件導向程式設計基礎 實驗簡介 學會用演算法語言c 描述抽象資料型別。理解資料結構的組成分為兩部分,第一部分是資料集 資料元素 第二部分是在此資料集上的操作。從物件導向的觀點看,這兩部分代表了物件的屬性和方法。掌握用c 描述資料結構的基本方法,即通過建立類來描述抽象資料型別。...