實現兩個鍊錶的合併課程設計報告

2021-08-01 23:00:59 字數 3449 閱讀 3379

目錄一需求分析 2

二概要設計 3

三詳細設計 4

四除錯分析與測試結果 6

五總結 7

六參考文獻 8

七致謝 9

八附錄 10

一需求分析

題目:實現兩個鍊錶的合併

問題描述:

(1)建立兩個鍊錶a和b,鍊錶元素個數分別為m和n個。

(2)假設元素分別為(x1,x2,…xm),和(y1,y2, …yn)。把它們合併成乙個線形表c,使得:

當m>=n時,c=x1,y1,x2,y2,…xn,yn,…,xm

當n>m時,c=y1,x1,y2,x2,…ym,xm,…,yn

輸出線形表c

(5) 用直接插入排序法對c進行公升序排序,生成鍊錶d,並輸出鍊錶d。

測試資料:

(1) a表(30,41,15,12,56,80)

b表(23,56,78,23,12,33,79,90,55)

(2) a表(30,41,15,12,56,80,23,12,34)

b表(23,56,78,23,12)

由題目的相關資訊可以分析得:首先我們需要建立兩個鍊錶ab,a鍊錶的元素個數為m,b鍊錶的元素個數為n;在將a、b鍊錶進行合併,根據m和n的大小關係決定鍊錶c的元素順序;再將c進行直接插入排序得到乙個新的鍊錶d;最後輸出四個鍊錶abcd的相關資訊。

二概要設計

本次課程設計所需要用到的是關於鍊錶的建立、合併以及直接插入排序的排序演算法。需要先建立兩個鍊錶,再將其合併為乙個無序鍊錶,最後對這個無序鍊錶進行直接插入排序並將其輸出。難點在於將ab合併為鍊錶c的操作以及對鍊錶c進行直接插入排序的操作。

圖1.鍊錶合併的流程圖

三詳細設計

我所負責的直接插入排序的**編寫以及主函式的編寫。直接插入排序的定義如下:把n個待排序的元素看成乙個有序表和乙個無序表,開始時有序表中只包含乙個元素,無序表中包含n-1個元素,排序過程中每次從無序表中取出第乙個元素,把他的排序嗎一次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表;主函式的編寫則是呼叫ab鍊錶初始化函式,再呼叫合併ab鍊錶函式,再呼叫直接插入排序函式,最後依次輸出abcd四個鍊錶的相關資訊。

void sortctod()

將節點插入

postd = new node分配乙個新的節點

postd->data = postc->data; //將d的值賦給c

postd->next = 0d的下乙個節點為0

pre->next = postdpre的下乙個指向d

postd->next = lopd迴圈條件

postc = postc->next; //指向下乙個節點

}}int main()

四除錯分析與測試結果

測試資料a表的輸出結果如圖2所示:

圖2測試資料b表的輸出結果如圖3所示:

圖3五總結

為期乙個星期的資料結構課程設計結束了,我們小組所選擇的課題也已經順利的完成。在這乙個星期中我受益良多。將在上個學期所學習的資料結構這門課程進行了乙個系統的整理歸納,讓我對資料結構了有更深刻的理解。

在選擇這個課題之後我查閱了相關的資料,

對在這次課程設計當中我們需要用到的知識做出了乙個系統的歸納:鍊錶的建立、鍊錶的合併、直接插入排序以及switch語句等知識點。

雖然知識點已經整理出來了,但是在實際的編寫過程當中,我們還是遇到了一些問題:比如鍊錶的合併當中需要對ab鍊錶的元素個數進行大小比較,在決定交叉排列的相關順序。這個地方我們試用了幾種方法都不能解決。

最後通過逐條語句的分析以及畫出的鍊錶和指標的圖示之後,才發現是乙個指標的指向出現了問題。經過修改之後順利的輸出了經過公升序排列的鍊錶d。在本次的課程設計當中我明白了幾點在今後的學習當中至關重要的東西:

首先,團隊合作精神是十分重要的,俗話還說:「三個臭皮匠勝過乙個諸葛亮。」乙個人的力量始終是有限的,明確的團隊分工才是完成任務的最好方法;其次,嚴謹的態度也是很重要的,編寫**的時候需要以乙個認真嚴謹一絲不苟的態度去面對你的問題。

如果在你完成一大段的**編寫之後在發現編譯不通過或者結果不正確,但是卻始終找不出問題的所在,只好從頭開始在卻逐句的分析。無疑這樣會浪費大量的時間和精力,也會使得進度大大的變慢。最後,擁有乙個良好的心態也是必不可少的,編寫**是乙個相對比較枯燥的過程,需要長時間的坐在電腦前面進行編寫,偶爾出現的問題會讓你思考很長時間卻不一定會得到很好的解決。

這時良好的心態的作用就會顯示出來,始終保持一顆平常心會使得你在關鍵的時刻很淡定的去面對所需要解決的問題。課程設計雖然結束了,但是我們要走的路依然很遠,對資料結構的學習遠遠沒有結束。我們不能滿足於書本上已經學會的知識,要積極的去拓展我們的知識面,加強同學之間的交流,分享大家學習的心得,最終獲得共同進步。

六參考文獻

01 譚浩強·c語言課程設計(第2版)·清華大學出版社,2023年:p89~p111

02 李根強·資料結構(c++版)(第2版)·中國水利水電出版社,2023年:p14~p37,p218~219

03 陳維興,林小茶·c++物件導向程式設計教程·(第3版)·清華大學出版社,2023年:p326~p338

04 嚴蔚敏吳偉民·資料結構(c語言版)·清華大學出版社,2023年:p18~p39,p265~p266

05 百度資料結構吧

七致謝在本次的資料結構課程設計當中,我需要感謝席金菊老師以及譚羅勇同學。席老師讓我們在機房中自己去合理的利用時間以及機器完成課題的設計,寬鬆的環境讓我們能夠毫無壓力的進行課程設計,這對我們的順利完成有很大的裨益。而作為一組的組員,我與譚羅勇同學共同將這個課題完成。

每當遇到了不可解決的問題的時候,我們總會進行深刻的**,一起查閱資料去努力解決這個問題。解決問題之後得豁然開朗總是讓人格外的有成就感。在彼此的無間合作當中,經過幾天的努力,我們的課題順利的完成並且程式執行的結果是可喜的。

沒有老師以及同學的幫助,我想獨自完成這次的課程設計是很有難度的,在此,再次向對我提供過幫助的人致以最誠摯的感謝!

八附錄#include

int m, n;

int count = 1;

struct node*a,*b,*c,*d;

void printlist(struct node *alist)

{ struct node *post;

post = alist->next;

switch(count)

{case 1:

cout< cout<<"lista: ";

break;

case 2:

cout< cout<<"listb: ";

break;

case 3:

cout< cout<<"listc: ";

break;

case 4:

cout< cout<<"listd: ";

break;

default:

cout< cout<<"list: ";

EXCEL中如何實現兩個工作表中兩列資料的比較

有兩個工作表,a和b a中有人數7000左右 內容為姓名金額 b中有人數1000人左右 內容同a表 ab兩表中金額一致,現在我想生成新錶c,要求c表中的姓名金額是a表中扣除b表以外的姓名金額求助!用vlookup函式,在a中查詢b,查不到的那部分就是c咯,篩選一下就可以了。這樣還比較簡單。能把函式列...

用陣列實現兩個乘數相乘

include int qiuweishu int pointer,int n while shang n 10 0 pointer weishu return pointer void main 用於統計在一次計算過程中乘數的位數 int arrchengji 1000 用於存放前n次計算過程中的...

兩個女孩的故事

她是海芋,喜歡 她是乙個躲在 裡的女孩。也不知道,從什麼時候開始,她開始在 中尋找自己,在 中哭泣。第一次哭,是在聽 回到過去 那時她剛剛離開初中,離開她的朋友。她第一次出外求學,只為了在一所重點高中考一所重點大學。她不知道這樣是否值得。她哭了。她想回到過去,回到和他們一起騎單車的日子,回到和他們手...