第一篇:數據結構課程設計教學大綱
《數據結構課程設計》教學大綱
Data Structure Course Design
一、課程的性質、教學目的和要求
《數據結構》是計算機軟件的一門基礎課程,計算機科學各領域及有關的應用軟件都要用到各種類型的數據結構。學好數據結構對掌握實際編程能力是很有幫助的。為了學好《數據結構》,必須編寫一些在特定數據結構上的算法,通過上機調試,才能更好地掌握各種數據結構及其特點,同時提高解決計算機應用實際問題的能力。
二、設計要點
1.設計和調試過程要規范化。① 需求分析
將題目中要求的功能進行敘述分析,并且設計解決此問題的數據存儲結構,(有些題目已經指定了數據存儲的,按照指定的設計),設計或敘述解決此問題的算法,描述算法建議使用流程圖,進行算法分析指明關鍵語句的時間復雜度。
給出實現功能的一組或多組測試數據,程序調試后,將按照此測試數據進行測試的結果列出來。
對有些題目提出算法改進方案,比較不同算法的優缺點。
如果程序不能正常運行,寫出實現此算法中遇到的問題,和改進方法。②源程序(可以是一組源程序,即詳細設計部分)
源程序要按照寫程序的規則來編寫。要結構清晰,重點函數的重點變量,重點功能部分要加上清晰的程序注釋。
程序能夠運行,要有基本的容錯功能。盡量避免出現操作錯誤時出現死循環。
2.課程設計實習報告的書寫格式
① 設計題目(任選其一)②運行環境(軟、硬件環境)③算法設計的思想 ④算法的流程圖 ⑤算法設計分析 ⑥源代碼 ⑦運行結果分析 ⑧收獲及體會 3.實施方式
可設2-3人一題,安排在《數據結構》課程開課學期布置題目,然后在期末前兩周完成。
三.設計要求
學生要發揮自主學習的能力,充分利用時間,安排好課設的時間計劃,并在課設過程中不斷檢測自己的計劃完成情況,及時的向教師匯報。課程設計按照教學要求需要1周時間完成,1周中每天至少要上6-8小時的機來調試C語言設計的程序,總共至少要上機調試程序30小時。為保證質量,需要每個學生將每天的上機調試程序的時間記錄下來,作為評判成績的標準之一。
四.設計題目
1、校園導游程序
[問題描述]
用無向網表示你所在學校的校園景點平面圖,圖中頂點表示主要景點,存放景點的編號、名稱、簡介等信息,圖中的邊表示景點間的道路,存放路徑長度等信息。要求能夠回答有關景點介紹、游覽路徑等問題。
[基本要求](1)查詢各景點的相關信息;
(2)查詢圖中任意兩個景點間的最短路徑。
(3)查詢圖中任意兩個景點間的所有路徑。
(4)增加、刪除、更新有關景點和道路的信息。
[選作內容]
(1)求多個景點的最佳(最短)游覽路徑。
(2)區分機動車道和人行道。
(3)實現導游圖的仿真界面。
2、算術表達式求值
[問題描述]
一個算術表達式是由操作數(operand)、運算符(operator)和界限符(delimiter)組成的。假設操作數是正整數,運算符只含加減乘除等四種運算符,界限符有左右括號和表達式起始、結束符“#”,如:#(7+15)*(23-28/4)#。引入表達式起始、結束符是為了方便。編程利用“算符優先法”求算術表達式的值。
[基本要求]
(1)從鍵盤讀入一個合法的算術表達式,輸出正確的結果。
(2)顯示輸入序列和棧的變化過程。
[選作內容]
擴充運算符集合。
引入變量操作數。
操作數類型擴充到實數。
3、文學研究助手
[問題描述]
文學研究人員需要統計某篇英文小說中某些形容詞的出現次數和位置。試寫一個實現這一目標的文字統計系統,稱為“文學研究助手”。[基本要求]
英文小說存于一個文本文件中。待統計的詞匯集合要一次輸入完畢,即統計工作必須在程序的一次運行之后就全部完成。程序的輸出結果是每個詞的出現次數和出現位置所在行的行號,格式自行設計。[測試數據]
以你的源程序模擬英文小說,程序語言保留字集作為待統計的詞匯集。[實現提示]
設小說中的詞匯一律不跨行。這樣,每讀入一行,就統計每個詞在這行中的出現次數。出現位置所在行的行號可以用鏈表存儲。若某行中出現了不止一次,不必存多個相同的行號。
如果讀者希望達到選作部分(1)和(2)所提出的要求,則首先應把KMP算法改寫成如下的等價形式,再將它推廣到多個模式的情形。[選作內容]
(1)模式匹配要基于KMP算法。
(2)整個統計過程中只對小說文字掃描一遍以提高效率。
(3)假設小說中的每個單詞或者從行首開始,或者前置以一個空格符。利用單詞匹配特點另寫一個高效的統計程序,與KMP算法統計程序進行效率比較。
(4)推廣到更一般的模式集匹配問題,并設待查模式串可以跨行(提示:定義操作getachar)
4.迷宮求解
[問題描述]
可以輸入一個任意大小的迷宮數據,用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出;
[基本要求]
含有兩個以上的迷宮圖,由用戶選擇哪一張迷宮圖; 實現深度優先、廣度優先兩種回溯法。
在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、源程序、算法的時間復雜度、另外可以提出算法的改進方法;
[實現提示]
可以用一個二維數組存儲迷宮圖,值為1或者0分別表示通路和不通; 搜索路徑可以參考樹的深度優先和廣度優先算法。
5.括號匹配的檢驗
[問題描述]
假設表達式中允許有兩種括號:圓括號和方括號,其嵌套的順序隨意,即CC或[([ ] [ ])]等為正確格式,[(])或(((]均為不正確的格式。檢驗括號是否匹配的方法可用“期待的緊迫程度”這個概念來描述。例如:考慮下列的括號序列:
[([ ] [ ])]
8
當計算機接受了第1個括號以后,他期待著與其匹配的第8個括號的出現,然而等來的卻是第2個括號,此時第1個括號“[”只能暫時靠邊,而迫切等待與第2個括號相匹配的 第7個括號“)”的出現,類似的,因只等來了第3個括號“[”,此時,其期待的緊迫程度較第2個括號更緊迫,則第2個括號只能靠邊,讓位于第3個括號,顯然第3個括號的期待緊迫程度高于第2個括號,而第2個括號的期待緊迫程度高于第1個括號;在接受了第4個括號之后,第3個括號的期待得到了滿足,消解之后,第2個括號的期待匹配就成了最急迫的任務了,??,依次類推。可見這個處理過程正好和棧的特點相吻合。
[基本要求]
設置一個棧,每讀入一個括號,若是左括號,則作為一個新的更急迫的期待壓入棧中,若是右括號,則或者是和當前棧頂的括號相匹配,或者是不合法的情況,輸出“此串括號匹配不合法”。在初始和結束時,棧應該是空的。
[測試數據]
輸入 #([ ]())#,結果“匹配”
輸入 #[()]#,結果“此串括號匹配不合法”
#為起始和結束標志。
6.停車場管理
[問題描述]
設停車場內只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。[測試數據]
設n=2,輸入數據為:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。每一組輸入數據包括三個數據項:汽車“到達”或“離去”信息、汽車牌照號碼及到達或離去的時刻,其中,‘A’表示到達;‘D’表示離去,‘E’表示輸入結束。[基本要求]
以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。每一組輸入數據包括三個數據項:汽車“到達”或“離去”信息、汽車牌照號碼及到達或離去的時刻,對每一組輸入數據進行操作后的輸出數據為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車離去;則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停留的時間不收費)。棧以順序結構實現,隊列以鏈表實現。[實現提示]
需另設一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結構實現。輸入數據按到達或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數據項:汽車的牌照號碼和進入停車場的時刻。[選作內容]
(1)兩個棧共享空間,思考應開辟數組的空間是多少?
(2)汽車可有不同種類,則它們的占地面積不同,收費標準也不同,如1輛客車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當于3輛小汽車的占地面積。
(3)汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。
(4)停放在便道上的汽車也收費,收費標準比停放在停車場的車低,請思考如何修改結構以滿足這種要求。
7.簡單行編輯程序
[問題描述]
文本編輯程序是利用計算機進行文字加工的基本軟件工具,實現對文本文件的插入、刪除等修改操作。限制這些操作以行為單位進行的編輯程序稱為行編輯程序。
被編輯的文本文件可能很大,全部讀入編輯程序的數據空間(內存)的做法既不經濟,也不總能實現。一種解決方法是逐段地編輯。任何時刻只把待編輯文件的一段放在內存,稱為活區。試按照這種方法實現一個簡單的行編輯程序。設文件每行不超過320個字符,很少超過80字符。[基本要求]
實現以下4條基本編輯命令:
(1)行插入。格式:i<行號><回車><文本><回車>
將<文本>插入活區中第<行號>行之后
(2)行刪除。格式:d<行號1>[□<行號2>]<回車>
刪除活區中第<行號1>行(到第<行號2>行)。兩種格式的例子是:“d10↙”和“d10□14↙”
(3)活區切換。格式:n<回車>
將活區寫入輸出文件,并從輸入文件中讀入下一段,作為新的活區。
(4)活區顯示。格式:p<回車>
逐頁地(每頁20行)顯示活區內容,每顯示一頁之后請用戶決定是否繼續顯示以后各頁(如果存在)。印出的每一行要前置以行號和一個空格符,行號固定占4位,增量為1。
各條命令中的行號均須在活區中各行行號范圍之內,只有插入命令的行號可以等于活區第一行行號減1,表示插入當前屏幕中第一行之前,否則命令參數非法。[測試數據]
由學生依據軟件工程的測試技術自己確定。注意測試邊界數據,如首行、尾行。[實現提示]
(1)設活區的大小用行數activemaxlen(可設為100)來描述。考慮到文本文件行長通常為正態分布,且峰值在60到70之間,用320×activemaxlen大小的字符數組實現存儲將造成大量浪費。可以以標準行塊為單位為各行分配存儲,每個標準行塊含81個字符。這些行塊可以組成一個數組,也可以利用動態 8 鏈表連接起來。一行文字可能占多個行塊。行尾可用一個特殊的ASCII字符(如(012)8)標識。此外,還應記住活區起始行號。行插入將引起隨后各行行號的順序下推。
(2)初始化過程包括:請用戶提供輸入文件名(空串表示無輸入文件)和輸出文件名,兩者不能相同。然后盡可能多地從輸入文件中讀入各行,但不超過activemaxlen-x。x的值可以自定,例如20。
(3)在執行行插入命令的過程中,每接收到一行時到要檢查活區大小是否已達activemaxlen。如果是,則為了在插入這一行之后仍保持活區大小不超過activemaxlen,應將插入點之前的活區部分中第一行輸出到輸出文件中;若插入點為第一行之前,則只得將新插入的這一行輸出。
(4)若輸入文件尚未讀完,活區切換命令可將原活區中最后幾行留在活區頂部,以保持閱讀連續性;否則,它意味著結束編輯或開始編輯另一個文件。
(5)可令前三條命令執行后自動調用活區顯示。[選作內容]
(1)對于命令格式非法等一切錯誤作嚴格檢查和適當處理。
(2)加入更復雜的編輯操作,如對某行進行串替換;在活區內進行模式匹配等,格式可以為S<行號>@<串1>@<串2><回車>和m<串><回車>。
8.圖遍歷的演示
[問題描述]
很多涉及圖上操作的算法都是以圖的遍歷操作為基礎的。試寫一個程序,演示無向圖的遍歷操作。[基本要求]
以鄰接表為存儲結構,實現連通無向圖的深度優先和廣度優先遍歷。以用戶指定的結點為起點,分別輸出每種遍歷下的結點訪問序列和相應生成樹的邊集。[測試數據]
由學生依據軟件工程的測試技術自己確定。注意測試邊界數據,如單個結點。[實現提示]
設圖的結點不超過30個,每個結點用一個編號表示(如果一個圖有n個結點,則它們的編號分別為1,2,?,n)。通過輸入圖的全部邊輸入一個圖,每個邊為一個數對,可以對邊的輸入順序作出某種限制。注意,生成樹的邊是有向邊,端點順序不能顛倒。
[選作內容]
(1)借助于棧類型(自己定義和實現)將深度優先遍歷用非遞歸算法實現。
(2)以鄰接多重表為存儲結構建立深度優先生成樹和廣度優先生成樹,再按凹入表或樹形打印生成樹
(3)實現有向圖的遍歷操作。
9、赫夫曼樹的建立
*問題描述:建立建立最優二叉樹函數
*要求:可以建立函數輸入二叉樹,并輸出其赫夫曼樹
在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、輸入輸出、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法;
10、圖的建立及輸出
*問題描述:建立圖的存儲結構(圖的類型可以是有向圖、無向圖、有向網、無向網,學生可以任選兩種類型),能夠輸入圖的頂點和邊的信息,并存儲到相應存儲結構中,而后輸出圖的鄰接矩陣。
11、各種排序
*問題描述:對30000個隨機整數,利用插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排序等排序方法進行排序,并統計每一種排序上機所花費的時間。
*輸入的數據形式為任何一個正整數,大小不限。*輸出的形式:數字大小逐個遞增的數列?
12、圖的遍歷
*問題描述:對任意給定的圖(頂點數和邊數自定),建立它的鄰接表并輸出,然后利用隊列的五種基本運算(置空隊列、進隊、出隊、取隊頭元素、判隊空)實現圖的廣度優先搜索周游。
13、線性表的操作
*問題描述:利作鏈表的插入運算建立線性鏈表,然后利用鏈表的查找、刪除、計數、輸出等運算反復實現鏈表的這些操作(插入、刪除、查找、計數、輸出單獨寫成函數的形式),并能在屏幕上輸出操作前后的結果。
14、編制一個求解迷宮通路的圖形界面演示程序。*問題描述:
1)輸入一個任意大小的迷宮,任設起點、終點、障礙,用棧求出一條走出迷宮的路徑,并顯示在屏幕上。
2)根據用戶界面提示,用鍵盤輸入。Home鍵設置迷宮起點,End鍵設終點,上下左右箭頭鍵移動,Enter鍵添加墻,Del鍵刪除墻,完成后按F9鍵演示,Esc鍵退出。
3)橙色的實心小圓圈表示起點,綠色實心圓圈表示終點,空心圓圈表示足跡,紅色方塊表示墻。4)本程序只求出一條成功的通路,但若對求解函數MazePath稍加更改即可求得全部路徑。此外,因受圖形界面限制,不能保存或載入測試文件(此功能可在Maze_text中實現)。
5)當未輸入起點時,消息顯示“Error: You must set Startplace.”;未輸入終點時,顯示“Error: You must set Endplace.” 找到路徑時,屏幕顯示足跡,并在消息框出現Path found,否則消去足跡,顯示Path not found.15.一元稀疏多項式計算器
*問題描述:一元多項式簡單計算器的基本功能是:(1)輸入并建立多項式;(2)輸出多項式,輸出形式為整數序列n,c1,e1,c2,e2,?,cn,en,其中n是多項式的項數,ci和ei分別是第I項的系數和指數,序列指指數降序排列;(3)多項式a和b相加,建立多項式a+b;(4)多項式a和b相減,建立多項式a-b。*實現提示:用帶頭結點的單鏈表存儲多項式,多項式的項數存在頭結點。
16.算術表達式求值演示
*問題描述:表達式求值是實現程序設計語言的基本問題之一,也是棧的應用的一個典型例子。設計一個程序,演示用算符優先法對算術表達式求值的過程。
*基本要求:以字符序列的形式從終端上輸入語法正確的、不含變量的整數表達式。利用教材中給出的算符優先關系,實現對算術四則混合運算表達式的求值,并仿照教材例3-1演示在求值中運算符棧、運算數棧、輸入字符和主要操作的變化過程。
*實現提示:(1)設置運算棧和運算數棧輔助分析算符優先關系。(2)在輸入表達式的字符序列的同時,完成運算符和運算數(整數)的識別處理,以及相應的運算。(3)在識別出運算數的同時,要將其字符序列形式轉換成整數形式。
*選作內容:(1)擴充運算符集,如增加乘方、單目減、賦值等運算;(2)運算量可以是變量;(3)運算量可以是實數類型;(4)計數器的功能和仿鎮界面。
17.稀疏矩陣運算器
*問題描述:稀疏矩陣是指那些多數元素為0的矩陣。利用“稀疏”特點進行存儲和計算可以大大節省存儲空間,提高計算效率。實現一個能進行稀疏矩陣基本原酸的運算器。
*基本要求:以“帶行邏輯鏈接信息”的三元組順序表示稀疏矩陣,實現兩個矩陣相加、相減和相乘的運算。稀疏矩陣的輸入形式采用三元組表示,而運算結構的矩陣則以通常的陣列形式列出。
*實現提示:(1)首先應輸入矩陣的行數和列數,并判別給出的兩個矩陣的行、列數對于所要求作的運算是否匹配。可設矩陣的行數和列數均不超過20。(2)程序可以對三元組的輸入順序加以限制,例如,按行優先。注意研究教科書中的算法,以便提高計算效率。(3)在用三元組表示稀 疏矩陣時,相加或相減所得結果矩陣應該另生成,乘積矩陣也可以用二維數組存放。18.圖書管理
*問題描述:圖書管理基本業務活動包括:對一本書的采編入庫、清除庫存、借閱和歸還等等。試設計一個圖書管理系統,將上述業務活動借助于計算機系統完成。
*基本要求:(1)每種書的登記內容至少包括書號、書名、作者、現存量和總庫存量等五4。(2)作為演示系統,不必使用文件,全部數據可以都在內存存放。但是由于上述四項基本業務活動都是通過書號(即關鍵字)進行的,所以要用B樹對書號盡力索引,以獲得高效率。(3)系統應實現的操作及功能定義如下:①采編入庫:新購入一種書,經分類和確定書號后登記到圖書帳目中去。如果這種書在帳目中已有,則只將總庫存量增加。②清除庫存:某種書已無保留價值,將它從圖書帳目中注銷。③某種書的現存量大于零,則借出一本,登記借閱者的圖書證號和歸還期限。④歸還:注銷對借閱者的登記,改變該書的現存量。⑤顯示:以凹入表的形式顯示B樹。這個操作是為了調試和維護的目的而設置的。下列B樹的打印格式如下所示:
19、文章編輯
*問題描述:輸入一頁文字,程序可以統計出文字、數字、空格的個數。靜態存儲一頁文章,每行最多不超過80個字符,共N行。
*要求(1)分別統計出其中英文字母數和空格數及整篇文章總字數;(2)統計某一字符串在文章中出現的次數,并輸出該次數;(3)刪除某一子串,并將后面的字符前移。
*存儲結構使用線性表,分別用幾個子函數實現相應的功能;
*輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。
*輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出“全部字母數”、“數字個數”、“空格個數”、“文章總字數”(3)輸出刪除某一字符串后的文章;
50,52 70,72
20、回文判斷
[問題描述]
試寫一個算法,判斷依次讀入的一個以@為結束符的字母序列,是否為形如‘序列1 & 序列2’模式的字符序列。其中序列1和序列2 中都不含字符‘&’,且序列2 是序列1的逆序列。例如,‘a+b&b+a’是屬該模式的字符序列,而‘1+3&3-1’則不是。[實現提示]
首先,序列1進棧,然后序列1出棧并與序列2比較。
21、建立二叉樹,層序、先序遍歷(用遞歸或非遞歸的方法都可以)*問題描述:
要求能夠輸入樹的各個結點,并能夠輸出用不同方法遍歷的遍歷序列;分別建立建立二叉樹存儲結構的的輸入函數、輸出層序遍歷序列的函數、輸出先序遍歷序列的函數;
五、參考書目
《數據結構 C語言》 嚴蔚敏 清華大學出版社 《c語言程序設計》 譚浩強 清華大學出版社 《數據結構》 高教出版社
《數據結構習題》 李春保 清華大學出版社 《數據結構習題》 嚴蔚敏 清華大學出版社 《c語言與數據結構》 王立柱 清華大學出版社
《數據結構(C語言篇)習題與解析》李春葆 清華大學出版社
計算機軟件教研室 2004年1月7日
第二篇:《數據結構》課程設計教學大綱
《數據結構》課程設計教學大綱
適用專業:計算機科學與技術 課程周數:2周
一、大綱說明
本大綱根據計算機科學與技術專業人才培養方案制訂。
(一)課程設計性質
課程設計是學生對課程所學知識的綜合運用,它與課堂聽講、上機實驗、課外練習、自學研究相輔相成,構成一個完整的課程教學體系。
(二)主要先修課程和后續課程 1.先修課程:《C語言程序設計》 2.后續課程:《計算機組成原理》、《操作系統》、《數據庫系統原理》
二、課程設計目的及基本要求
《數據結構》是一門實踐性強的課程,其中對算法設計和程序編寫的掌握尤為重要。學生雖然可以通過與課堂教學同步的上機實驗完成相關內容的練習,但卻往往局限于一些功能簡單、彼此之間關系獨立的算法和程序。課程設計是一種綜合訓練,致力于培養學生全面、靈活的算法設計思想和較高的編程能力,為今后從事計算機開發與應用打下基礎。新世紀需要具有豐富科學知識、獨立解決實際問題、有創造能力的新型人才,這也是該課程設計的最終目的。
三、課程設計內容及安排
1、矩陣的轉置、加減和相乘
問題描述:采用十字鏈表存儲的稀疏矩陣,完成矩陣轉置、加減和相乘功能。要求:
1)采用函數形式完成轉置、相加、相減和相乘; 2)有輸入數據合法性檢查; 3)矩陣的存儲采用動態數組;
4)兩個矩陣產生后要分別打印出來,完成相應處理后結果要打印出來; 5)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
2、線索二叉樹
問題描述:實現線索二叉樹的生成、遍歷、查找、插入和刪除操作。要求:
1)各功能模塊必須是單獨的函數; 2)線索二叉樹是動態生存的; 3)輸入數據進行必要的合法性檢查;
4)執行每一個功能后,按二叉樹廣義表的表達方式打印輸出,檢查結果是否正確; 5)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
3、根據哈夫曼樹的原理求n個自然數相加減后結果最小(中間結果、最后結果不能負)。
問題描述:實現線索二叉樹的生成、遍歷、查找、插入和刪除操作。要求:
1)可以循環測試,可以選擇退出程序;
2)打印這n個自然數進行加減的表達式(注意:中間結果不能為負); 例如:輸入1,2,3,最后打印出3-2-1=0 3)輸入數據要進行合法性檢查;
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
4、普里姆算法求最小生成樹
問題描述:用普里姆算法求有向網圖或無向網圖的最小生成樹。要求:
1)先生成一個網圖,該網圖既能是無向網圖,有能是有向網圖; 2)要求分別采用鄰接矩陣和鏈接表存儲來完成; 3)最后打印輸出最小生成樹;
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
5、克魯斯卡爾算法求最小生成樹
問題描述:用克魯斯卡爾算法求有向網圖或無向網圖的最小生成樹。要求:
1)先生成一個網圖,該網圖既能是無向網圖,有能是有向網圖; 2)要求分別采用鄰接矩陣和鏈接表存儲來完成; 3)最后打印輸出最小生成樹;
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
6、狄杰斯特算法求最短路徑
問題描述:采用狄杰斯特算法求一個頂點到其它頂點的最短路徑。要求:
1)先生成一個帶權的有向圖,并打印輸出; 2)用函數形式完成狄杰斯特算法;
3)打印輸出最后的該頂點到其它頂點的路徑,并打印最短路徑。4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
7、佛洛依德算法求最短路徑
問題描述:采用佛洛依德算法求每對頂點到其它頂點的最短路徑。要求:
1)先生成一個帶權的有向圖,并打印輸出; 2)用函數形式完成佛洛依德算法; 3)打印輸出每對頂點的最短路徑。
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
8、分塊查找
問題描述:采用分塊查找的方法查找指定的關鍵碼。要求:
1)可以循環查找,可以選擇退出;
2)分別采用順序存儲和鏈式存儲完成分塊查找,其中在順序存儲結果下,索引表的查找采用二分查找;
3)分別用函數完成索引表查找和塊中查找;
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
9、關鍵路徑
問題描述:建立AOE圖,確定其拓撲有序后求關鍵路徑。要求:
1)建立一個AOE圖,并輸出結果確保創建成功;
2)判斷AOE圖是一個拓撲有序序列,如果不是拓撲有序則報錯; 3)編寫函數求AOE圖的關鍵路徑; 4)打印輸出關鍵路徑;
5)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
10、二叉排序樹
問題描述:完成二叉排序樹的創建、查找、插入和刪除操作。要求:
1)創建一顆二叉排序樹,并打印輸出;
2)分別編寫函數完成二叉排序樹的查找、插入和刪除; 3)測試二叉排序樹的查找、插入和刪除,分別打印測試結果; 4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
11、B-樹
問題描述:完成B-樹的創建、查找、插入和刪除。要求:
1)創建一顆B-樹,并打印輸出;
2)分別編寫函數完成B-的查找、插入和刪除;
3)測試B-樹的查找、插入和刪除,分別打印測試結果; 4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
12、哈希表查找
問題描述:定義一個哈希表和對哈希表進行插入、查找和刪除、打印。要求:
1)定義一個哈希表,并打印輸出結果; 2)分別編寫函數完成查找、插入和刪除; 3)測試查找、插入和刪除,分別打印測試結果;
4)每一個函數要有必要的注釋,在課程設計論文中有流程圖。
四、指導方式
集體輔導與個別輔導相結合。
五、課程設計考核方法及成績評定
1、程序清單:代碼應具有詳細注釋,用來說明程序的功能、結構;
2、設計報告:報告中應包含上機時遇到的問題及解決辦法,觀察到的現象及其分析,對程序設計技巧的總結及分析等;程序的輸出結果及對結果的分析;實驗的心得體會,以及其它信息;
3、提交時,須向指導教師說明:程序的使用方法,調用方法、操作步驟等;要求輸入信息的類型及格式;出錯信息的含義及程序的適用范圍等。
成績評定:課程設計成績分兩部分,設計報告占40%,設計作品占60%。
六、課程設計教材及主要參考資料 教學參考書
[1]李素若.《數據結構》.北京:化學工業出版社,2009.參考資料:
[1] 朱蓉,《數據結構實驗指導書》
[2]嚴蔚敏 吳偉民,.數據結構(C語言版),1999,清華大學出版社; [3]嚴蔚敏 吳偉民,.數據結構題集(C語言版),1999,清華大學出版社; [4]徐孝凱,數據結構課程實驗,2002,清華大學出版社;
[5]孟佳娜 胡瀟琨,算法與數據結構實驗與習題,2004,機械工業出版社;
七、其他 i=[1] t=[12] i=[2] t=[4] i=[3] t=[10] i=[4] t=[12] i=[5] t=[1] i=[6] t=[2] i=[7] t=[2] i=[8] t=[11] i=[9] t=[5] i=[10] t=[10] i=[11] t=[11] i=[12] t=[8] i=[13] t=[2] i=[14] t=[3] i=[15] t=[9] i=[16] t=[7] i=[17] t=[5] i=[18] t=[6] i=[19] t=[12] i=[20] t=[7] i=[21] t=[3] i=[22] t=[7] i=[23] t=[8] i=[24] t=[6] i=[25] t=[7] i=[26] t=[8] i=[27] t=[3] i=[28] t=[2] i=[29] t=[7] i=[30] t=[4] i=[31] t=[3] i=[32] t=[8] i=[33] t=[9] i=[34] t=[1] i=[35] t=[1] i=[36] t=[3] i=[37] t=[8] i=[38] t=[1] i=[39] t=[10] i=[40] t=[12] i=[41] t=[10] i=[42] t=[9] i=[43] t=[12] i=[44] t=[2] i=[45] t=[1] i=[46] t=[6] i=[47] t=[4] i=[48] t=[7] i=[49] t=[1]
第三篇:數據結構課程設計教學大綱
《數據結構課程設計》教學大綱
Data Structure Course Design
一、課程的性質、教學目的和要求
《數據結構》是計算機軟件的一門基礎課程,計算機科學各領域及有關的應用軟件都要用到各種類型的數據結構。學好數據結構對掌握實際編程能力是很有幫助的。為了學好《數據結構》,必須編寫一些在特定數據結構上的算法,通過上機調試,才能更好地掌握各種數據結構及其特點,同時提高解決計算機應用實際問題的能力。
二、設計要點
1.設計和調試過程要規范化。① 需求分析
將題目中要求的功能進行敘述分析,并且設計解決此問題的數據存儲結構,(有些題目已經指定了數據存儲的,按照指定的設計),設計或敘述解決此問題的算法,描述算法建議使用流程圖,進行算法分析指明關鍵語句的時間復雜度。
給出實現功能的一組或多組測試數據,程序調試后,將按照此測試數據進行測試的結果列出來。
對有些題目提出算法改進方案,比較不同算法的優缺點。
如果程序不能正常運行,寫出實現此算法中遇到的問題,和改進方法。②源程序(可以是一組源程序,即詳細設計部分)
源程序要按照寫程序的規則來編寫。要結構清晰,重點函數的重點變量,重點功能部分要加上清晰的程序注釋。
程序能夠運行,要有基本的容錯功能。盡量避免出現操作錯誤時出現死循環。
2.課程設計實習報告的書寫格式
① 設計題目(任選其一)②運行環境(軟、硬件環境)③算法設計的思想 ④算法的流程圖 ⑤算法設計分析 ⑥源代碼 ⑦運行結果分析 ⑧收獲及體會 3.實施方式
可設3-4人一題,安排在《數據結構》課程開課學期布置題目,然后在期末兩周時間內完成。
三.設計要求
學生要發揮自主學習的能力,充分利用時間,安排好課設的時間計劃,并在課設過程中不斷檢測自己的計劃完成情況,及時的向教師匯報。課程設計按照教學要求需要兩周時間完成,兩周中每天至少要上3-4小時的機來調試C語言設計的成成,總共至少要上機調試程序30小時。為保證質量,需要每個學生將每天的上機調試程序的時間記錄下來,作為評判成績的標準之一。
四.設計題目
1、運動會分數統計
*問題描述:參加運動會有n個學校,學校編號為1……n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1……m,女子m+1……m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m<=20,n<=20)*功能要求:
1).可以輸入各個項目的前三名或前五名的成績; 2).能統計各學校總分,3).可以按學校編號、學校總分、男女團體總分排序輸出;
4).可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢取得前三或前五名的學校。
規定:輸入數據形式和范圍:20以內的整數(如果做得更好可以輸入學校的名稱,運動項目的名稱)
輸出形式:有中文提示,各學校分數為整形
界面要求:有合理的提示,每個功能可以設立菜單,根據提示,可以完成相關的功能要求。
*存儲結構:學生自己根據系統功能要求自己設計,但是要求運動會的相關數據要存儲在數據文件中。(數據文件的數據讀寫方法等相關內容在c語言程序設計的書上,請自學解決)請在最后的上交資料中指明你用到的存儲結構;
測試數據:要求使用
1、全部合法數據;
2、整體非法數據;
3、局部非法數據。進行程序測試,以保證程序的穩定。測試數據及測試結果請在上交的資料中寫明;
2、一元多項式計算
*問題描述:能夠按照指數降序排列建立并輸出多項式; 能夠完成兩個多項式的相加、相減,并將結果輸入;
在上交資料中請寫明:存儲結構、多項式相加的基本過程的算法(可以使用程序流程圖)、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法;
3、訂票系統
*問題描述:通過此系統可以實現如下功能: 1)錄入:
可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定)2)查詢:
可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況;
3)訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班; 4)退票: 可退票,退票后修改相關數據文件;
客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。5)修改航班信息:當航班信息改變可以修改航班數據文件 *要求:
根據以上功能說明,設計航班信息,訂票信息的存儲結構,設計程序完成功能;
4、迷宮求解
*問題描述:可以輸入一個任意大小的迷宮數據,用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出; *要求:
在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法;
5、文章編輯
*問題描述:輸入一頁文字,程序可以統計出文字、數字、空格的個數。靜態存儲一頁文章,每行最多不超過80個字符,共N行。
*要求(1)分別統計出其中英文字母數和空格數及整篇文章總字數;(2)統計某一字符串在文章中出現的次數,并輸出該次數;(3)刪除某一子串,并將后面的字符前移。
*存儲結構使用線性表,分別用幾個子函數實現相應的功能;
*輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。
*輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出“全部字母數”、“數字個數”、“空格個數”、“文章總字數”(3)輸出刪除某一字符串后的文章;
6、joseph環
*問題描述:編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人只有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下一個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計一個程序來求出出列順序。*要求:利用單向循環鏈表存儲結構模擬此過程,按照出列的順序輸出各個人的編號。
*測試數據:
m的初值為20,n=7 ,7個人的密碼依次為3,1,7,2,4,7,4,首先m=6,則正確的輸出是什么?
*輸入數據:建立輸入處理輸入數據,輸入m的初值,n,輸入每個人的密碼,建立單循環鏈表。
*輸出形式:建立一個輸出函數,將正確的輸出序列
7、猴子選大王
*問題描述:一堆猴子都有編號,編號是1,2,3...m ,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數,每數到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。*輸入數據:輸入m,n m,n 為整數,n 8、建立二叉樹,層序、先序遍歷(用遞歸或非遞歸的方法都可以)*問題描述: 要求能夠輸入樹的各個結點,并能夠輸出用不同方法遍歷的遍歷序列;分別建立建立二叉樹存儲結構的的輸入函數、輸出層序遍歷序列的函數、輸出先序遍歷序列的函數; 9、赫夫曼樹的建立 *問題描述:建立建立最優二叉樹函數 *要求:可以建立函數輸入二叉樹,并輸出其赫夫曼樹 在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、輸入輸出、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法; 10、紙牌游戲 *問題描述:編號為1-52張牌,正面向上,從第2張開始,以2為基數,是2的倍數的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數,是3的倍數的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數,是4的倍數的牌翻一次,直到最后一張牌;...再依次5的倍數的牌翻一次,6的,7的 直到 以52為基數的 翻過。輸出:這時正面向上的牌有哪些? 11、圖的建立及輸出 *問題描述:建立圖的存儲結構(圖的類型可以是有向圖、無向圖、有向網、無向網,學生可以任選兩種類型),能夠輸入圖的頂點和邊的信息,并存儲到相應存儲結構中,而后輸出圖的鄰接矩陣。 12、拓撲排序 *問題描述:編寫函數實現圖的拓撲排序。 13、各種排序 *問題描述:對30000個隨機整數,利用插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排序等排序方法進行排序,并統計每一種排序上機所花費的時間。 *輸入的數據形式為任何一個正整數,大小不限。*輸出的形式:數字大小逐個遞增的數列? 14、圖的遍歷 *問題描述:對任意給定的圖(頂點數和邊數自定),建立它的鄰接表并輸出,然后利用隊列的五種基本運算(置空隊列、進隊、出隊、取隊頭元素、判隊空)實現圖的廣度優先搜索周游。 15、線性表的操作 *問題描述:利作鏈表的插入運算建立線性鏈表,然后利用鏈表的查找、刪除、計數、輸出等運算反復實現鏈表的這些操作(插入、刪除、查找、計數、輸出單獨寫成函數的形式),并能在屏幕上輸出操作前后的結果。 16、長整數四則運算 *問題描述:設計一個實現任意長的整數進行加法運算的演示程序。*基本要求:利用雙向循環鏈表實現長整數的存儲,每個結點含一個整形變量。任何整形變量的范圍是-(2^151)。輸入和輸出形式:按中國對于長整數的表示習慣,每四位一組,組間用逗號隔開。*測試數據: (1)0;0;應輸出“0”。 (2)-2345,6789;-7654,3211;應輸出“-1,0000,0000”。(3)-9999,9999;1,0000,0000,0000;應輸出“999(4)1,0001,0001;-1,0001,0001;應輸出“0”。(5)1,0001,0001;-1,0001,0000;應輸出“1”。 (6)-9999,9999,9999;-9999,9999,9999;應輸出“1,9999,9999,9998”。 (7)1,0000,9999,9999;1;應輸出“1,0001,0000,0000”。 *實現提示: (1)每個結點中可以存放的最大整數為32767,才能保證兩數相加不會溢出,但若這樣存放,即相當于按32768進制存放,在十進制與32768 5 進制數之間的轉換十分不方便,故可以在每個結點中僅存十進制的4位,即不超過9999的非負整數,整個鏈表表示為萬進制。 (2)可以利用頭結點數據域的符號代表長整數的符號。用其絕對值表示元素結 點數目。相加過程中不要破壞兩個操作數鏈表。兩操作數的頭指針存于指針數組中是簡化程序結構的一種方法。不能給長整數位數規定上限。 17、馬踏棋盤 *問題描述:將馬隨機放在國際象棋的8 8棋盤Bord[8Ⅱ8]的某個方格中,馬按走棋規則進行移動。要求每個方格上只進入一次,走遍棋盤上全部64個方格。編制非遞歸程序,求出馬的行走路線,并按求出的行走路線,將數字1,2,?,64依次填入個8 8的方陣,輸出之。*測試數據:由讀者指定,可自行指定一個馬的初始位置。 *實現提示:每次在多個可走位置中選擇一個進行試探,其余未曾試探過的可走位置必須用適當結構妥善管理,以備試探失敗時的“回溯”(悔棋)使用。 18、校園導游咨詢 *問題描述: (1)設計你的學校的校園平面圖,所含景點不少于10個。以圖中頂點表示學校各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關信息。 (2)為來訪客人提供圖中任意景點的問路查詢,即查詢任意兩個景點之間的一條最短的簡單路徑。 (3)為來訪客人提供圖中任意景點相關信息的查詢。*測試數據:由讀者根據實際情況指定。 *實現提示:一般情況下,校園的道路是雙向通行的,可設校園平面圖是一個無向網。頂點和邊均含有相關信息。 19、編制一個求解迷宮通路的圖形界面演示程序。*問題描述: 1)輸入一個任意大小的迷宮,任設起點、終點、障礙,用棧求出一條走出迷宮的路徑,并顯示在屏幕上。 2)根據用戶界面提示,用鍵盤輸入。Home鍵設置迷宮起點,End鍵設終點,上下左右箭頭鍵移動,Enter鍵添加墻,Del鍵刪除墻,完成后按F9 鍵演示,Esc鍵退出。 3)橙色的實心小圓圈表示起點,綠色實心圓圈表示終點,空心圓圈表示足跡,紅色方塊表示墻。4)本程序只求出一條成功的通路,但若對求解函數MazePath稍加更改即可求得全部路徑。此外,因受圖形界面限制,不能保存或載入測試文件(此功能可在Maze_text中實現)。 5)當未輸入起點時,消息顯示“Error: You must set Startplace.”;未輸入終點時,顯示“Error: You must set Endplace.” 找到路徑時,屏幕顯示足跡,并在消息框出現Path found,否則消去足跡,顯示Path not found.20.一元稀疏多項式計算器 *問題描述:一元多項式簡單計算器的基本功能是:(1)輸入并建立多項式;(2)輸出多項式,輸出形式為整數序列n,c1,e1,c2,e2,?,cn,en,其中n是多項式的項數,ci和ei分別是第I項的系數和指數,序列指指數降序排列;(3)多項式a和b相加,建立多項式a+b;(4)多項式a和b相減,建立多項式a-b。*實現提示:用帶頭結點的單鏈表存儲多項式,多項式的項數存在頭結點。 21.算術表達式求值演示 *問題描述:表達式求值是實現程序設計語言的基本問題之一,也是棧的應用的一個典型例子。設計一個程序,演示用算符優先法對算術表達式求值的過程。 *基本要求:以字符序列的形式從終端上輸入語法正確的、不含變量的整數表達式。利用教材中給出的算符優先關系,實現對算術四則混合運算表達式的求值,并仿照教材例3-1演示在求值中運算符棧、運算數棧、輸入字符和主要操作的變化過程。 *實現提示:(1)設置運算棧和運算數棧輔助分析算符優先關系。(2)在輸入表達式的字符序列的同時,完成運算符和運算數(整數)的識別處理,以及相應的運算。(3)在識別出運算數的同時,要將其字符序列形式轉換成整數形式。 *選作內容:(1)擴充運算符集,如增加乘方、單目減、賦值等運算;(2)運算量可以是變量;(3)運算量可以是實數類型;(4)計數器的功能和仿鎮界面。 22.稀疏矩陣運算器 *問題描述:稀疏矩陣是指那些多數元素為0的矩陣。利用“稀疏”特點進行存儲和計算可以大大節省存儲空間,提高計算效率。實現一個能進行稀疏矩陣基本原酸的運算器。 *基本要求:以“帶行邏輯鏈接信息”的三元組順序表示稀疏矩陣,實現兩個矩陣相加、相減和相乘的運算。稀疏矩陣的輸入形式采用三元組表示,而運算結構的矩陣則以通常的陣列形式列出。 *實現提示:(1)首先應輸入矩陣的行數和列數,并判別給出的兩個矩陣的行、列數對于所要求作的運算是否匹配。可設矩陣的行數和列數均不超過20。(2)程序可以對三元組的輸入順序加以限制,例如,按行優先。注意研究教科書中的算法,以便提高計算效率。(3)在用三元組表示稀疏矩陣時,相加或相減所得結果矩陣應該另生成,乘積矩陣也可以用二維數組存放。23.圖書管理 *問題描述:圖書管理基本業務活動包括:對一本書的采編入庫、清除庫存、借閱和歸還等等。試設計一個圖書管理系統,將上述業務活動借助于計算機系統完成。 *基本要求:(1)每種書的登記內容至少包括書號、書名、作者、現存量和總庫存量等五4。(2)作為演示系統,不必使用文件,全部數據可以都在內存存放。但是由于上述四項基本業務活動都是通過書號(即關鍵字)進行的,所以要用B樹對書號盡力索引,以獲得高效率。(3)系統應實現的操作及功能定義如下:①采編入庫:新購入一種書,經分類和確定書號后登記到圖書帳目中去。如果這種書在帳目中已有,則只將總庫存量增加。②清除庫存:某種書已無保留價值,將它從圖書帳目中注銷。③某種書的現存量大于零,則借出一本,登記借閱者的圖書證號和歸還期限。④歸還:注銷對借閱者的登記,改變該書的現存量。⑤顯示:以凹入表的形式顯示B樹。這個操作是為了調試和維護的目的而設置的。下列B樹的打印格式如下所示: 50,52 70,72 8 《數據結構課程設計》教學大綱 課程名稱: 課程編號: 適用專業: 總 學 分: 總 學 時: 其中實驗學時 主 撰 人: 撰寫日期: 一、目的與任務 《數據結構》是計算機軟件的一門基礎課程,計算機科學各領域及有關的應用軟件都要用到各種類型的數據結構。學好數據結構對掌握實際編程能力是很有幫助的。為了學好《數據結構》,必須編寫一些在特定數據結構上的算法,通過上機調試,才能更好地掌握各種數據結構及其特點,同時提高解決計算機應用實際問題的能力。 二、教學基本要求 1.設計和調試過程要規范化 需求分析:將題目中要求的功能進行敘述分析,并且設計解決此問題的數據存儲結構,(有些題目已經指定了數據存儲的,按照指定的設計),設計或敘述解決此問題的算法,描述算法建議使用流程圖,進行算法分析指明關鍵語句的時間復雜度。 給出實現功能的一組或多組測試數據,程序調試后,將按照此測試數據進行測試的結果列出來。 對有些題目提出算法改進方案,比較不同算法的優缺點。 如果程序不能正常運行,寫出實現此算法中遇到的問題,和改進方法。②源程序(可以是一組源程序,即詳細設計部分) 源程序要按照寫程序的規則來編寫。要結構清晰,重點函數的重點變量,重點功能部分要加上清晰的程序注釋。 程序能夠運行,要有基本的容錯功能。盡量避免出現操作錯誤時出現死循環。2.課程設計實習報告的書寫格式 ① 設計題目 數據結構 408104 計算機科學與技術 72 30 2012.6 436104 軟件工程 審 核 人: ②運行環境(軟、硬件環境)③算法設計的思想 ④算法的流程圖 ⑤算法設計分析 ⑥源代碼 ⑦運行結果分析 ⑧收獲及體會 3.實施方式 可設3-4人一題,安排在《數據結構》課程開課學期布置題目,然后在期末兩周時間內完成。 4.答辯:課題的論述、測試及問題回答 三、課程設計內容 1、背包問題的求解: 假設有一個能裝入總體積為T的背包和n件體積分別為w1 , w2 , … , wn 的物品,能否從n件物品中挑選若干件恰好裝滿背包,即使w1 +w2 + … + wn=T,要求找出所有滿足上述條件的解。例如:當T=10,各件物品的體積{1,8,4,3,5,2}時,可找到下列4組解:(1,4,3,2),(1,4,5),(8,2),(3,5,2)。 提示:可利用回溯法的設計思想來解決背包問題。首先將物品排成一列,然后順序選取物品裝入背包,假設已選取了前i 件物品之后背包還沒有裝滿,則繼續選取第i+1件物品,若該件物品“太大”不能裝入,則棄之而繼續選取下一件,直至背包裝滿為止。但如果在剩余的物品中找不到合適的物品以填滿背包,則說明“剛剛”裝入背包的那件物品“不合適”,應將它取出“棄之一邊”,繼續再從“它之后”的物品中選取,如此重復,直至求得滿足條件的解,或者無解。 由于回溯求解的規則規則是“后進先出”因此自然要用到棧。 2、訂票系統(1)問題描述 通過此系統可以實現如下功能: 1)錄入: 可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定)2)查詢: 可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況; 3)訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班; 4)退票: 可退票,退票后修改相關數據文件;客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 5)修改航班信息:當航班信息改變可以修改航班數據文件(2)要求 根據以上功能說明,設計航班信息,訂票信息的存儲結構,設計程序完成功能; 3、迷宮求解(1)問題描述 可以輸入一個任意大小的迷宮數據,用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出;(2)要求 在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法; 4、dijkstra算法求最短路徑 問題描述:從鍵盤上輸入一個圖的基本信息(圖用鄰矩陣表示) 1)首先輸入圖的結點數->num 2)依次輸入圖的各條邊 3)程序所能達到的功能:輸出用dijkstra算法求出的一條最短路徑。 5、joseph環(1)問題描述 編號是1,2,??,n的n個人按照順時針方向圍坐一圈,每個人只有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下一個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計一個程序來求出出列順序。(2)要求 利用單向循環鏈表存儲結構模擬此過程,按照出列的順序輸出各個人的編號。(3)測試數據: m的初值為20,n=7 ,7個人的密碼依次為3,1,7,2,4,7,4,首先m=6,則正確的輸出是什么? (4)輸入數據:建立輸入處理輸入數據,輸入m的初值,n,輸入每個人的密碼,建立單循環鏈表。 (5)輸出形式:建立一個輸出函數,將正確的輸出序列 6、建立二叉樹,層序、先序遍歷(用遞歸或非遞歸的方法都可以)(1)問題描述:建立二叉樹,并實行層序、先序遍歷等算法 (2)要求:能夠輸入樹的各個結點,并能夠輸出用不同方法遍歷的遍歷序列;分別建立建立二叉樹存儲結構的的輸入函數、輸出層序遍歷序列的函數、輸出先序遍歷序列的函數; 7、赫夫曼樹的建立 (1)問題描述:建立建立最優二叉樹函數 (2)要求:可以建立函數輸入二叉樹,并輸出其赫夫曼樹 在上交資料中請寫明:存儲結構、基本算法(可以使用程序流程圖)、輸入輸出、源程序、測試數據和結果、算法的時間復雜度、另外可以提出算法的改進方法; 8、圖的建立及輸出 (1)問題描述:建立圖的存儲結構(圖的類型可以是有向圖、無向圖、有向網、無向網,學生可以任選兩種類型) (2)要求:能夠輸入圖的頂點和邊的信息,并存儲到相應存儲結構中,而后輸出圖的鄰接矩陣。 9、拓撲排序 (1)問題描述:編寫函數實現圖的拓撲排序。(2)要求:能夠以一定的方式輸入數據結點 10、各種排序 (1)問題描述:對30000個隨機整數,利用插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排序等排序方法進行排序,并統計每一種排序上機所花費的時間。(2)要求:輸入的數據形式為任何一個正整數,大小不限。 輸出的形式:數字大小逐個遞增的數列 11、圖的遍歷 對任意給定的圖(頂點數和邊數自定),建立它的鄰接表并輸出,然后利用隊列的五種基本運算(置空隊列、進隊、出隊、取隊頭元素、判隊空)實現圖的廣度優先搜索周游。 12、線性表的操作 利用鏈表的插入運算建立線性鏈表,然后利用鏈表的查找、刪除、計數、輸出等運算反復實現鏈表的這些操作(插入、刪除、查找、計數、輸出單獨寫成函數的形式),并能在屏幕上輸出操作前后的結果。 13、長整數四則運算 *問題描述:設計一個實現任意長的整數進行加法運算的演示程序。*基本要求:利用雙向循環鏈表實現長整數的存儲,每個結點含一個整形變量。任何整形變量的范圍是-(2^151)。輸入和輸出形式:按中國對于長整數的表示習慣,每四位一組,組間用逗號隔開。*測試數據: (1)0;0;應輸出“0”。 (2)-2345,6789;-7654,3211;應輸出“-1,0000,0000”。(3)-9999,9999;1,0000,0000,0000;應輸出“999(4)1,0001,0001;-1,0001,0001;應輸出“0”。(5)1,0001,0001;-1,0001,0000;應輸出“1”。 (6)-9999,9999,9999;-9999,9999,9999;應輸出“1,9999,9999,9998”。(7)1,0000,9999,9999;1;應輸出“1,0001,0000,0000”。*實現提示: (1)每個結點中可以存放的最大整數為32767,才能保證兩數相加不會溢出,但若這樣存放,即相當于按32768進制存放,在十進制與32768進制數之間的轉換十分不方便,故可以在每個結點中僅存十進制的4位,即不超過9999的非負整數,整個鏈表表示為萬進制。 (2)可以利用頭結點數據域的符號代表長整數的符號。用其絕對值表示元素結 點數目。相加過程中不要破壞兩個操作數鏈表。兩操作數的頭指針存于指針數組中是簡化程序結構的一種方法。不能給長整數位數規定上限。 14、克魯斯爾算法求最小生成樹 問題描述:從鍵盤上輸入一個圖的基本信息(圖用鄰矩陣表示) 1)首先輸入圖的結點數->num 2)依次輸入圖的各條邊 3)程序所能達到的功能:能夠輸出這個圖的一棵最小生成樹 15、算術表達式求值演示 (1)問題描述:表達式求值是實現程序設計語言的基本問題之一,也是棧的應用的一個典型例子。設計一個程序,演示用算符優先法對算術表達式求值的過程。(2)基本要求:以字符序列的形式從終端上輸入語法正確的、不含變量的整數表達式。利用教材中給出的算符優先關系,實現對算術四則混合運算表達式的求值,并仿照教材例3-1演示在求值中運算符棧、運算數棧、輸入字符和主要操作的變化過程。 16.稀疏矩陣運算器 *問題描述:稀疏矩陣是指那些多數元素為0的矩陣。利用“稀疏”特點進行存儲和計算可以大大節省存儲空間,提高計算效率。實現一個能進行稀疏矩陣基本原酸的運算器。 *基本要求:以“帶行邏輯鏈接信息”的三元組順序表示稀疏矩陣,實現兩個矩陣相加、相減和相乘的運算。稀疏矩陣的輸入形式采用三元組表示,而運算結構的矩陣則以通常的陣列形式列出。 *實現提示:(1)首先應輸入矩陣的行數和列數,并判別給出的兩個矩陣的行、列數對于所要求作的運算是否匹配。可設矩陣的行數和列數均不超過20。(2)程序可以對三元組的輸入順序加以限制,例如,按行優先。注意研究教科書中的算法,以便提高計算效率。(3)在用三元組表示稀疏矩陣時,相加或相減所得結果矩陣應該另生成,乘積矩陣也可以用二維數組存放。 四、時間安排 《數據結構課程設計》安排在第三學期進行,時間2周(17-18周)。 五、組織管理 1.由院、系指派經驗豐富的專業教師擔任指導教師。 2.課程設計實行指導教師負責制,由指導教師全面負責課程設計的指導與管理工作。 六、成績考核與評定 學生課程設計結束后寫出總結報告,對設計的內容和效果進行總結,按照學生在設計期間的表現,指導老師對每位學生寫出評語和鑒定,系課程設計領導小組組織答辯,最后確定每位學生課程設計成績,課程設計成績分為優、良、中、及格和不及格五個等級。 課程設計成績為平時表現30%、設計報告50%、答辯20%。評分標準: ① 優秀:目的明確,態度端正,模范遵守學校的各項紀律。工作認真,積極 主動,吃苦耐勞,能出色的完成設計任務。撰寫了高質量的總結報告。答辯準確流利。 ② 良好:目的明確,態度端正,能遵守學校的各項紀律,工作比較積極主動。能較好地完成設計任務,成績較突出,表現良好;撰寫了質量比較高的實習報告。答辯較準確流利。 ③ 及格:目的明確,態度基本端正,能遵守學校紀律,在督促下能開展工作 并完成一定的設計任務,無大的違紀違規現象;撰寫了實習報告。通過了答辯。 ④ 不及格:實習態度端正,不能遵守實習單位的紀律,不服從領導,自由散漫,工作消極被動,不能完成實習任務,實習期間有失職、曠工、打架、酗酒等大的過失。或無實習報告,沒有通過答辯。 2.成績評定 依據上述考核內容,最后采用優(>90分)、良(80~89分)、中(70~79分)及格(60~69分)、不及格(<60分)五級記分制評定學生課程設計成績。 七、主要參考資料 《數據結構 C語言》 嚴蔚敏 清華大學出版社 2006.2 《c語言程序設計》 譚浩強 清華大學出版社 2010.8 《數據結構習題》 李春保 清華大學出版社 2006.4 《數據結構習題》 嚴蔚敏 清華大學出版社 2006.2 《c語言與數據結構》 王立柱 清華大學出版社 2010.6 《數據結構(C語言篇)習題與解析》李春葆 清華大學出版社2006.4 《數據結構課程設計》課程設計教學大綱 Course Design of Data Structure 課程代碼: 適用專業:信息計算、信息安全 總學時數:1周編寫年月:2004年7月 執 筆:劉科峰、李小英、高學軍 課程性質:設計(論文)/必修 開課學期:5 總學分數:1 修訂年月:2007年7月 一、課程設計的性質和目的 《數據結構課程設計》是本學院本科專業的集中實踐性環節之一,是學習完《數據結構》課程后進行的一次全面的綜合應用練習。其目的就是要達到理論與實際相結合,使學生能夠根據數據對象的特性,學會數據組織的方法,能把現實世界中的實際問題在計算機內部表示出來,并培養良好的程序設計技能。 二、課程設計內容及學時分配 寫出不少于3000字的課程設計說明書。說明書中除了在封面中應有題目、班級、姓名、學號和課程設計日期以外,其正文一般有如下幾個方面的內容: 1.需求分析 2.概要設計 3.詳細設計 4.調試分析 5.測試結果 6.附錄或參考資料 三、課程設計教學基本要求 四、課程設計選題 根據教材《數據結構題集(C語言版)》(嚴蔚敏、吳偉民主編)選擇課程設計題目,或選擇下列與實際應用緊密結合的較綜合性的題目,要求通過設計,在數據結構的邏輯特性和物理表示、數據結構的選擇應用、算法的設計及其實現等方面加深對課程基本內容的理解和綜合運用。 1. 運動會分數統計系統; 2. 停車場管理系統; 3. 民航售票系統; 4. 有理數四則運算器; 5. 文本格式化器; 6. 哈夫曼編/譯碼器; 7. 教學計劃編制; 8. 計算機輔助考核系統; 9. 學籍管理系統; 10. 圖書管理系統。 五、本課程與其它課程的聯系與分工 本課程是《數據結構》的配套課程,學完《數據結構》后進行的綜合性課程設計。 六、成績評定 由指導教師根據學生完成任務的情況、課程設計說明書的質量和課程設計過程中的工作態度等綜合打分。課程設計結束時,要求學生寫出課程設計報告,可運行的軟件系統(包括源程序)。課程設計成績:上機情況(20%)包括出勤情況、調試表現。設計報告占40%,設計作品占40%。 成績評定實行優、良、中、及格和不及格五個等級。優秀者人數一般不得超過總人數的20%。不及格者不能得到相應的學分,需重新做課程設計,經指導教師考核及格后,方可取得相應學分。有關的考查相關材料(文字材料以及磁盤或光盤)統一妥善保管。 七、建議教材與教學參考書 [1] 《數據結構》,嚴蔚敏 吳偉民 編著,清華大學出版社 [2] 《數據結構題集》嚴蔚敏 吳偉民 米寧 編著,清華大學出版社第四篇:《數據結構課程設計》教學大綱
第五篇:數據結構課程設計課程設計教學大綱