版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)說明書</b></p><p> 題 目: 雙向循環(huán)鏈表</p><p> 基于鄰接表的圖的實(shí)現(xiàn)</p><p> 課 程: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</p><p> 院 (部): 計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 專
2、 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 班 級(jí): </p><p><b> 學(xué)生姓名: </b></p><p> 學(xué) 號(hào): </p><p><b> 指導(dǎo)教師: </b></p><p><b> 完成
3、日期: </b></p><p><b> 目 錄</b></p><p><b> 課程設(shè)計(jì)任務(wù)書I</b></p><p> 課程設(shè)計(jì)任務(wù)書II</p><p> 雙向循環(huán)鏈表的實(shí)現(xiàn)3</p><p><b> 一、問題描述3
4、</b></p><p><b> 二、數(shù)據(jù)結(jié)構(gòu)4</b></p><p><b> 三、邏輯設(shè)計(jì)5</b></p><p><b> 四、編碼7</b></p><p><b> 五、測(cè)試數(shù)據(jù)9</b></p>
5、<p><b> 六、測(cè)試情況11</b></p><p> 基于鄰接表的圖的實(shí)現(xiàn)12</p><p><b> 一、問題描述12</b></p><p><b> 二、數(shù)據(jù)結(jié)構(gòu)13</b></p><p><b> 三、邏輯設(shè)計(jì)13&l
6、t;/b></p><p><b> 四、編碼15</b></p><p><b> 五、測(cè)試數(shù)據(jù)16</b></p><p><b> 六、測(cè)試情況16</b></p><p><b> 結(jié) 論17</b></p>&
7、lt;p><b> 參考文獻(xiàn)18</b></p><p> 課程設(shè)計(jì)指導(dǎo)教師評(píng)語19</p><p><b> 課程設(shè)計(jì)任務(wù)書I</b></p><p><b> 課程設(shè)計(jì)任務(wù)書II</b></p><p> 指導(dǎo)教師(簽字): 教研室
8、主任(簽字):</p><p><b> 雙向循環(huán)鏈表的實(shí)現(xiàn)</b></p><p><b> 一、問題描述</b></p><p> 用圖示的方法描述所處理的雙向循環(huán)鏈表的建立,以及插入刪除操作前后鏈表的狀態(tài)</p><p> 只有有頭節(jié)點(diǎn)的雙向循環(huán)鏈表</p><p&
9、gt; 有頭節(jié)點(diǎn)的雙向循環(huán)鏈表</p><p> 雙向循環(huán)鏈表的插入 </p><p><b> 雙向循環(huán)鏈表的刪除</b></p><p><b> 二、數(shù)據(jù)結(jié)構(gòu)</b></p><p> template <class T></p><
10、p> struct chainNode </p><p><b> {</b></p><p> // data members</p><p> T element;</p><p> chainNode<T> *right;</p><p> chainNode&
11、lt;T> *left;</p><p> // methods</p><p> chainNode() {</p><p> left=NULL;</p><p> right=NULL;</p><p><b> }</b></p><p> cha
12、inNode(const T& element)</p><p><b> {</b></p><p> this->element = element;</p><p> left=NULL;</p><p> right=NULL;</p><p><b>
13、}</b></p><p> chainNode(const T& element,chainNode<T> * left,chainNode<T>* right)</p><p><b> {</b></p><p> this->element = element;</p>
14、<p> this->left = left;</p><p> this->right = right;</p><p><b> }</b></p><p><b> };</b></p><p><b> 三、邏輯設(shè)計(jì)</b></
15、p><p><b> 1、總體思路</b></p><p><b> (1)存儲(chǔ)結(jié)構(gòu)</b></p><p> 基于鄰接表,繼承l(wèi)inerlist類,具體實(shí)現(xiàn)雙向循環(huán)鏈表的存儲(chǔ)</p><p><b> (2)基本函數(shù)</b></p><p> 雙
16、向循環(huán)鏈表的插入,刪除</p><p> 2、模塊劃分(圖示的方法)</p><p> (1)erase(刪除)</p><p><b> Yes</b></p><p><b> No</b></p><p><b> Yes</b><
17、/p><p> (2)insert(插入)</p><p><b> No</b></p><p><b> Yes</b></p><p><b> No</b></p><p><b> Yes</b></p>
18、<p> 函數(shù)或類的具體定義和功能</p><p> bool empty() const {return listSize == 0;}//是否為空</p><p> int size() const {return listSize;}</p><p> T& get(int theIndex) const;</p>
19、<p> int indexOf(const T& theElement) const;</p><p> void erase(int theIndex);</p><p> void insert(int theIndex, const T& theElement);</p><p> void right_output(ost
20、ream& out) const;</p><p> void left_output(ostream& out) const;</p><p><b> 四、編碼</b></p><p> template<class T></p><p> void doublechain<
21、T>::checkIndex(int theIndex) const</p><p> {// Verify that theIndex is between 0 and listSize - 1.</p><p> if (theIndex < 0 || theIndex >= listSize)</p><p> {ostringstre
22、am s;</p><p> s << "index = " << theIndex << " size = " << listSize;</p><p> throw illegalIndex(s.str());</p><p><b> }</b>
23、</p><p><b> }</b></p><p> template<class T></p><p> T& doublechain<T>::get(int theIndex) const</p><p> {// 返回索引為theIndex的元素.</p>
24、<p> //checkIndex(theIndex);</p><p> if(theIndex<0||theIndex>=listSize){</p><p><b> T a=0;</b></p><p> return a;}</p><p> // move to desired
25、 node</p><p> chainNode<T>* currentNode = headerNode->right;</p><p> for (int i = 0; i < theIndex; i++)</p><p> currentNode = currentNode->right;</p><p&
26、gt; return currentNode->element;</p><p><b> }</b></p><p> template<class T></p><p> int doublechain<T>::indexOf(const T& theElement) const</p&g
27、t;<p> {// 返回元素theElement首次出現(xiàn)時(shí)的索引.</p><p> // Return -1 if theElement not in list.</p><p> chainNode<T>* currentNode = headerNode->right;</p><p> int index = -1;
28、 // 當(dāng)前節(jié)點(diǎn)的索引</p><p> while (++index <listSize &&</p><p> currentNode->element != theElement)</p><p><b> {</b></p><p> // move to next node
29、</p><p> currentNode = currentNode->right;</p><p><b> }</b></p><p> // make sure we found matching element</p><p> if (index == listSize)</p>
30、<p> return -1;</p><p><b> else</b></p><p> return index;</p><p><b> }</b></p><p> template<class T></p><p> void
31、doublechain<T>::erase(int theIndex)</p><p> {// Delete the element whose index is theIndex.</p><p> // Throw illegalIndex exception if no such element.</p><p> //checkIndex
32、(theIndex);</p><p> if (theIndex < 0 || theIndex > listSize)</p><p><b> {</b></p><p> cout<<"元素不存在"<<endl;</p><p><b>
33、return;</b></p><p><b> }</b></p><p> // valid index, locate node with element to delete</p><p> chainNode<T>* deleteNode;</p><p> chainNode&
34、lt;T>* p = headerNode;</p><p> for (int i = 0; i < theIndex; i++)</p><p> p = p->right;</p><p> deleteNode = p->right;</p><p> p->right=deleteNode-&g
35、t;right;</p><p> deleteNode->right->left=p;</p><p> listSize--;</p><p> delete deleteNode;</p><p><b> }</b></p><p> template<clas
36、s T></p><p> void doublechain<T>::insert(int theIndex, const T& theElement)</p><p> {// Insert theElement so that its index is theIndex.</p><p> if (theIndex < 0
37、|| theIndex > listSize)</p><p><b> {</b></p><p> cout<<"Insert index must be between 0 to listSize"<<endl;</p><p> //ostringstream s;</p&g
38、t;<p> //s << "index = " << theIndex << " size = " << listSize;</p><p> //throw illegalIndex(s.str());</p><p><b> }</b></p>
39、;<p> chainNode<T>* q= new chainNode<T>(theElement);</p><p> chainNode<T>* p = headerNode;</p><p> for (int i = 0; i < theIndex; i++)</p><p> p = p-&
40、gt;right;</p><p> q->right=p->right;</p><p> q->left=p;</p><p> p->right=q;</p><p> q->right->left=q;</p><p> listSize++;</p>
41、<p><b> }</b></p><p> template<class T></p><p> void doublechain<T>::right_output(ostream& out) const</p><p> {// Put the list into the stream
42、out.</p><p> chainNode<T>* currentNode = headerNode->right;</p><p> for (int i = 0;i < listSize;i++){</p><p> out << currentNode->element << " &q
43、uot;;</p><p> currentNode = currentNode->right;</p><p><b> }</b></p><p><b> }</b></p><p> template<class T></p><p> v
44、oid doublechain<T>::left_output(ostream& out) const</p><p> {// Put the list into the stream out.</p><p> chainNode<T>* currentNode = headerNode->left;</p><p>
45、 for (int i = 0;i < listSize;i++){</p><p> out << currentNode->element << " ";</p><p> currentNode = currentNode->left;</p><p><b> }</b&g
46、t;</p><p><b> }</b></p><p><b> 五、測(cè)試數(shù)據(jù)</b></p><p> 1、對(duì)每個(gè)函數(shù)的測(cè)試數(shù)據(jù)</p><p><b> (1)新建一個(gè)鏈表</b></p><p> y.insert(0, 2);<
47、;/p><p> y.insert(1, 6);</p><p> y.insert(0, 1);</p><p> y.insert(2, 4);</p><p> y.insert(3, 5);</p><p> y.insert(2, 3);</p><p> insert的異常測(cè)
48、試y.insert(7,4);</p><p><b> (2)刪除元素</b></p><p><b> 異常條件測(cè)試</b></p><p> y.erase(7);</p><p><b> 正常條件測(cè)試</b></p><p> y.e
49、rase(1);</p><p> y.erase(0);</p><p> y.erase(2);</p><p> 邊緣條件測(cè)試(將剩余的元素刪除)</p><p> y.erase(0);</p><p> y.erase(0);</p><p> y.erase(0);<
50、;/p><p> 2、對(duì)程序整體的測(cè)試數(shù)據(jù)</p><p> (1)判斷鏈表是否為空</p><p> y.empty();</p><p><b> (2)測(cè)試鏈表長(zhǎng)度</b></p><p><b> y.size();</b></p><p&g
51、t; (3)通過索引查找值</p><p> y.get(-1);</p><p><b> y.get(3);</b></p><p> (4)通過值查找索引</p><p> y.indexOf(7);</p><p> y.indexOf(4);</p><p
52、><b> 六、測(cè)試情況</b></p><p><b> 1.新建一個(gè)鏈表</b></p><p><b> 測(cè)試indexOf</b></p><p><b> 3.測(cè)試get</b></p><p><b> 4測(cè)試eras
53、e</b></p><p> 插入(insert)(theIndex>listSize)</p><p> 基于鄰接表的圖的實(shí)現(xiàn)(insertEdge)</p><p><b> 問題描述</b></p><p><b> 鄰接表的形態(tài)</b></p><
54、;p><b> aList </b></p><p><b> 11</b></p><p><b> 2</b></p><p><b> 圖</b></p><p><b> 3</b></p>&l
55、t;p><b> 22</b></p><p><b> 1</b></p><p><b> 4</b></p><p><b> 插入一條邊</b></p><p><b> 3</b></p>&
56、lt;p><b> 21</b></p><p><b> 2</b></p><p><b> 4</b></p><p><b> 1</b></p><p><b> 二.?dāng)?shù)據(jù)結(jié)構(gòu)</b></p>
57、<p> template <class T></p><p> struct wEdge</p><p> {// vertex and weight pair</p><p> int vertex;</p><p><b> T weight;</b></p><
58、;p> wEdge(int theVertex = 0, T theWeight = 0)</p><p> {vertex = theVertex; weight = theWeight;}</p><p> operator int() const {return vertex;}</p><p><b> };</b><
59、;/p><p><b> 三、邏輯設(shè)計(jì)</b></p><p><b> 1.基本函數(shù)</b></p><p><b> 圖的邊插入</b></p><p><b> 2.模塊劃分</b></p><p><b>
60、(1)插入一條邊</b></p><p><b> 開</b></p><p><b> No</b></p><p><b> Yes</b></p><p> 3、函數(shù)或類的具體定義和功能</p><p> int number
61、OfVertices() const;//返回圖的頂點(diǎn)數(shù)</p><p> int numberOfEdges() const;//返回圖的邊數(shù)</p><p> bool existsEdge(int, int) const;//if 邊( ,)存在,返回true,否則返回false</p><p> void insertEdge(edge<T>
62、; *theEdge);//插入邊(i,j)</p><p> void eraseEdge(int, int);//刪除邊</p><p> int degree(int) const;//返回頂點(diǎn)的度,只用于無向圖</p><p> int inDegree(int) const;//返回頂點(diǎn)的入度</p><p> int ou
63、tDegree(int) const;//返回頂點(diǎn)的出度</p><p> bool directed() const;//有向圖</p><p> bool weighted() const;//加權(quán)圖</p><p> void checkVertex(int theVertex) const;</p><p> void out
64、put(ostream& out) const;</p><p><b> 編碼</b></p><p> template<class T></p><p> int graph<T>::numberOfVertices() const{</p><p><b> re
65、turn n;</b></p><p><b> }</b></p><p> template<class T></p><p> int graph<T>::numberOfEdges() const{</p><p><b> return e;</b&g
66、t;</p><p><b> }</b></p><p> template<class T></p><p> bool graph<T>::directed() const{</p><p> return false;</p><p><b>
67、}</b></p><p> template<class T></p><p> bool graph<T>::weighted() const{</p><p> return true;</p><p><b> }</b></p><p> t
68、emplate<class T></p><p> void graph<T>::insertEdge(edge<T> *theEdge){</p><p> int v1 = theEdge->vertex1();</p><p> int v2 = theEdge->vertex2();</p>
69、<p> if ( existsEdge(v1,v2) )</p><p><b> {</b></p><p><b> return;</b></p><p><b> }</b></p><p> aList[v1].push_back( wEdge
70、<T>(v2, theEdge->weight()) );//vector里面的一個(gè)push函數(shù)</p><p> aList[v2].push_back( wEdge<T>(v1, theEdge->weight()) );</p><p><b> e++;</b></p><p><b>
71、 }</b></p><p> template<class T></p><p> void graph<T>::output(ostream& out) const</p><p> {// Output the adjacency matrix.</p><p> typename
72、std::list<wEdge<T> >::iterator p;</p><p> for (int i = 1; i <= n; i++){</p><p> for(p = aList[i].begin(); p != aList[i].end(); p++)</p><p> out <<*p <<
73、 " ";</p><p> cout<<endl;</p><p><b> }</b></p><p><b> }</b></p><p><b> 五、測(cè)試數(shù)據(jù)</b></p><p><b>
74、 新建一個(gè)鄰接表</b></p><p> a.insertEdge(new weightedEdge<int>(1, 3, 2));</p><p> a.insertEdge(new weightedEdge<int>(2, 3, 1));</p><p> a.insertEdge(new weightedEdge&
75、lt;int>(1, 2, 3));</p><p> a.insertEdge(new weightedEdge<int>(2, 4, 2));</p><p> a.insertEdge(new weightedEdge<int>(3, 4, 4));</p><p><b> 六、測(cè)試情況</b><
76、;/p><p><b> 結(jié) 論</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1] 數(shù)據(jù)結(jié)構(gòu)算法與應(yīng)用:c++語言描述/(美)薩尼(Sahni,S)著;王立柱等譯,北京:機(jī)械工業(yè)出版社 2015.1</p><p> [2] 金遠(yuǎn)平.《數(shù)據(jù)結(jié)構(gòu)(c++描述).北京:清
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---雙向鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 循環(huán)單鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--雙向循環(huán)鏈表的創(chuàng)建及相關(guān)操作的實(shí)現(xiàn)
- 雙向鏈表的建立插入刪除算法的實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-鏈表操作
- 雙向循環(huán)鏈表基于鄰接表的圖的實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--鏈表
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---城市鏈表的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表操作
- 實(shí)現(xiàn)兩個(gè)鏈表的合并數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---實(shí)現(xiàn)兩個(gè)鏈表的合并
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---鏈表的創(chuàng)建、插入、刪除、修改
- 單鏈表的基本操作迷宮問題數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-雙鏈表創(chuàng)建與演示設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--鏈表的維護(hù)與文件形式的保存
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---鏈表的維護(hù)與文件形式的保存
評(píng)論
0/150
提交評(píng)論