資料結構實驗四報告

2022-09-05 02:30:05 字數 2029 閱讀 6625

實驗名稱: 實驗四——題目二

學生姓名:

班級:班內序號:

學號:日期: 2023年12月16日

1.實驗要求

使用鍊錶實現下面各種排序演算法,並進行比較。

排序演算法:

1、插入排序

2、氣泡排序

3、快速排序

4、簡單選擇排序

5、其他

要求:1、測試資料分成三類:正序、逆序、隨機資料

2、對於這三類資料,比較上述排序演算法中關鍵字的比較次數和移動次數(其中關鍵字交換計為3次移動)。

3、對於這三類資料,比較上述排序演算法中不同演算法的執行時間,精確到微秒(選作)

4、對2和3的結果進行分析,驗證上述各種演算法的時間複雜度

編寫測試main()函式測試線性表的正確性

2. 程式分析

2.1 儲存結構

含頭指標的單鏈表為主要資料結構。單鏈表、結點結構示意圖如下圖一:

頭指標 ……

圖一單鏈表示意圖結點結構

2.2 關鍵演算法分析

關鍵演算法:

1.頭插法建立單鏈表

演算法步驟:

1. 通過對話介面輸入資料個數count;

2. 用頭插法建立單鏈表

2.1.用k接受輸入的資料 ,申請乙個新記憶體空間,將k賦值給他的data

2.2.將first的next所指向的節點賦給s的next指標,將s賦給first的next指標

2.3利用pre將s與first及s後的節點聯絡起來

2.4.每迴圈一次迴圈控制標量a減一

3. 用乙個迴圈將資料按原順序賦給data陣列,以便重新進行新排序

時間複雜度為o(n),空間複雜度為o(n);

2、插入排序演算法

演算法步驟:

1. 將q和p 放在鍊錶的前兩個節點;

2. 迴圈開始,q從第二個節點開始移動;

3. 將p從第乙個節點一直移動到q的第乙個節點,比較值,找到適合的位置就插入;

4. 如果q與其前面的比較完畢,就把q後移;

當指標移到鍊錶末尾時,排序結束。

時間複雜度為o(n2)

3、氣泡排序演算法

1. 將p和q指標分別放在鍊錶的開始兩個位置;

2. 比較p和q 的值:

如果p->data大於q->data,就交換;

否則繼續往後走;

到p和q走完一次迴圈,然後再重複,找出第二大的。

時間複雜度為o(n2)

4、簡單選擇排序演算法

1. 將p指標的q指標放在鍊錶的前兩個位置;

2. 將p從頭開始移動;

3. 將q從p後的第乙個指標開始移動,然後每一次比較最小值;

4. 將最小值與p交換,p後移,直至結束。

時間複雜度為o(n2)

5、快速排序演算法

1. 用top與end分別表示頭指標和為指標

2. 進入迴圈,用於找到左邊第乙個數的位置

2.1 設定temp變數,做值交換是暫存資料的作用

進入迴圈,如果p指向資料小於q的且p和q不相等,則q右移;否則跳出迴圈並將p和q指向數值交換,然後p右移乙個節點

進入另乙個迴圈,如果p指向資料小於q的且p和q不相等,則p右移乙個節點;否則跳出迴圈並將q和p指向數值交換,然後q右移乙個節點

如果p和q不等,則繼續迴圈

3. p和q 相等跳出迴圈,排好了乙個數,遞迴呼叫該函式

3.1.如果top和p不相等且top不是p的前指標,則以top和p->pre為頭為指標進入迴圈

3.2若果end和q不相等且end不是q的後指標,則以end和q->next為頭尾指標進入迴圈。

時間複雜度為o(nlog2n)

3.程式執行結果

1.測試主函式流程:

繼續排序則

重新建立鍊錶

繼續不繼續2、測試結論

4. 總結

在這次實驗中,複習了鍊錶的有關知識,進一步加深了對各種排序方式的理解,注意了異常處理,在程式設計中採用選擇的方式,這並沒有必要,同時也沒有將各種排序演算法安排在同一介面進行比較,需要進一步改進。在以後,也需要多多加強實踐,進一步提高程式設計能力。

實驗報告四資料結構

寧波大學科學技術學院 資料結構實驗報告 實驗名稱資料查詢 實驗者 08信計肖勤偉 一實驗名稱 順序表的查詢演算法比較分析 二實驗目的 熟悉靜態查詢的相關演算法 三實驗內容 1.實現順序表的查詢演算法 2.實現有序表的折半查詢演算法 四實驗步驟 1需求分析 需要建立乙個線性表 2演算法概要 建立乙個表...

資料結構課內實驗四

實驗四排序的基本操作與實現 一 實驗目的 1 複習c語言中指標 結構體 子程式呼叫等基礎知識 2 掌握常用的排序方法,並掌握用c語言實現排序演算法的方法 3 深刻理解排序的定義和各種排序方法的特點,並能加以靈活應用 4 了解各種方法的排序過程及其時間複雜度的分析方法。二 實驗裝置 微機三 預習要求 ...

資料結構上機實驗四

實驗內容 廣義表的基本操作 實驗要求 1 廣義表的建立與顯示要作為函式被呼叫.2 把自己使用的廣義表結構明確的表達出來.3 基本上實現每個實驗題目的要求.分組要求 可單獨完成,也可兩人一組。實驗目的 1 熟悉c c 基本程式設計,培養動手能力.2 通過實驗,加深對廣義表的理解.評分標準 1 只完成第...