91夜夜人人揉人人捏人人添-91一区二区三区四区五区-91伊人久久大香线蕉-91在线电影-免费a网址-免费v片网站

當前位置:網站首頁 >> 作文 >> 最新數據結構與算法課程論文(5篇)

最新數據結構與算法課程論文(5篇)

格式:DOC 上傳日期:2024-08-09 03:47:33
最新數據結構與算法課程論文(5篇)
時間:2024-08-09 03:47:33     小編:zdfb

在日常的學習、工作、生活中,肯定對各類范文都很熟悉吧。范文書寫有哪些要求呢?我們怎樣才能寫好一篇范文呢?下面是小編幫大家整理的優質范文,僅供參考,大家一起來看看吧。

數據結構與算法課程論文篇一

11計本一班 許雪松 1104013018

數據結構與算法是計算機程序設計的重要理論技術基礎,它不僅是計算機科學的核心課程,而且也已經成為其他理工專業的熱門選修課。總的來說感觸還是比較深的,剛開始上的時候還蠻簡單的,越到后面感覺越難,算法也更復雜了,有時候甚至聽不懂,老師上課時講的也蠻快的,所以只能靠課下下功夫了。下面是我對本學期學習這門課的總結。

一、數據結構與算法知識點

第一章的數據結構和算法的引入,介紹了數據和數據類型、數據結構、算法描述工具、算法和算法評價四個方面的知識。

第二章具體地介紹了順序表的概念、基本運算及其應用。基本運算有:初始化表、求表長、排序、元素的查找、插入及刪除等。元素查找方法有:簡單順序查找、二分查找和分塊查找。排序方法有:直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序及歸并排序等。最后介紹了順序串的概念,重點在于串的模式匹配。

第三章主要介紹的是線性邏輯結構的數據在鏈接存儲方法下數據結構鏈表的相關知識。主要是單鏈表、循環鏈表的數據類型結構、數據結構、基本運算及其實現以及鏈表的相關應用問題,在此基礎上介紹了鏈串的相關知識。在應用方面有多項式的相加問題、歸并問題、箱子排序問題和鏈表在字符處理方面的應用問題等。本章未完全掌握的是循環鏈表的算法問題和c的描述。

第四章介紹在兩種不同的存儲結構下設計的堆棧,即順序棧和鏈棧的相關知識,了解堆棧的相關應用,掌握應用堆棧來解決實際問題的思想及方法。本章主要內容是順序棧和鏈棧的概念、數據類型、數據結構定義和基本運算算法及其性能分析。本章堆棧算法思想較為簡單,所以能較好掌握。

第五章主要介紹順序存儲和鏈接存儲方法下的兩種隊列、順序(循環)隊列和鏈隊列的數據結構、基本運算及其性能分析以及應用。順序隊列(重點是循環隊列)和鏈隊列的概念、數據類型描述、數據結構和基本運算算法及其性能分析等。本章同堆棧有點類似,算法思想較為簡單,所以能較好掌握;但難點重在循環隊列隊空、隊滿的判斷條件問題。

第六章“特殊矩陣、廣義表及其應用”將學習數組、稀疏矩陣和廣義表的基本概念,幾種特殊矩陣的存儲結構及其基本運算,在此基礎上學習特殊矩陣的計算算法與廣義表應用等相關問題。本章的重點是相關數據結構的存儲結構及其基本運算算法。掌握了特殊矩陣的壓縮存儲結構,在該存儲結構下元素的定位方法,理解了稀疏矩陣的計算和廣義表的存儲結構。

第七章二叉樹及其應用。分為二叉樹的基本概念、二叉樹存儲結構、二叉樹的遍歷算法、線索二叉樹、二叉樹的應用(哈夫曼樹、二叉排序樹、堆和堆排序、基本算法)。基本算法包括二叉樹的建立、遍歷、線索化等算法。在此基礎上,介紹二叉樹的一些應用問題,包括哈夫曼編碼問題、(平衡)二叉排序樹問題和堆排序問題等。

第八章說的是樹和森林,首先我們要知道樹與二叉樹是不同的概念。課本介紹了樹和森林的概念、遍歷和存儲結構,還有樹、森林和二叉樹的相互關系,樹或森林怎樣轉化成二叉樹,二叉樹又如何轉換為樹和森林等算法。

第九章“散列結構及其應用”是邏輯結構“集合型”的數據元素在散列存儲方法下的數據結構及其應用知識內容。主要介紹散列函數的概念、散列結構的概念、散列存儲結構的概念---散列表、散列函數和散列表中解決沖突的處理方法---開放定址法、鏈地址法以及散列表的基本算法及其性能分析。本章概念較為多,所以掌握不太好。

第十章圖及其應用。分為圖的概念、圖的存儲結構及其基本算法、圖的遍歷及算法、有向圖的連通性和最小生成樹、圖的最小生成樹、非連通圖的生成森林算法、最短路徑、有向無環圖及其應用。

二、對各知識點的掌握情況

我對各知識點的掌握情況總結如下:

對于第一章對數據結構的概念理解頗深,大概是每次都要談論到吧。對算法的時間性能,空間性能基本了解。這些在后面的章節都會有運用。第二章本章重點和難點在查找和排序問題的算法思想上,6種排序方法的性能比較。本章未掌握的為希爾排序、快速排序、歸并排序的時間復雜度分析。第三章,對鏈表掌握還好,對其數據結構進行了分析,有循環鏈表,掌握的不是很好,對其中一些用法不熟練。第四章堆棧,本章堆棧算法思想較為簡單,所以能較好掌握,但表達式計算問題未掌握好的。第五章的循環隊列隊空、隊滿的判斷條件問題掌握的不是很好。第六章的重點是相關數據結構的存儲結構及其基本運算算法。掌握了特殊矩陣的壓縮存儲結構,在該存儲結構下元素的定位方法,理解了稀疏矩陣的計算和廣義表的存儲結構。第七章對二叉樹掌握較好,其概念,存儲,遍歷有很好的掌握。就是對二叉排序樹有點生疏,它的生成算法不是很會。第八章樹樹與二叉樹之間的轉換,森林與二叉樹的轉換算法思想基本掌握。第九章散列的一些知識,沒有深入學習,大概了解了散列存儲結構散列表,散列函數,沖突的處理方法。第十章了解了圖的逆鄰接表的存儲結構,關鍵路徑求解算法未能掌握好,不能靈活運用圖的不同數據結構和遍歷算法解決復雜的應用問題。

三、學習體會

剛剛接觸這門課時,看到課本中全是算法,當時就暈了,因為我的c語言學的不好,我擔心會影響這門課的學習,后來上課時老師說學習這門課的基礎是c語言,所以我當時就決定一定要好好補補,爭取不被拖后腿,在學習這門課的期間,也遇到了不少問。但是通過學習數據結構與算法,讓我對程序有了新的認識,也有了更深的理解。同時,也讓我認識到,不管學習什么,概念是基礎,所有的知識框架都是建立在基礎概念之上的,所以,第一遍看課本要將概念熟記于心,然后構建知識框架。并且,對算法的學習是學習數據結構的關鍵。在第二遍看課本的過程中,要注重對算法的掌握。對于一個算法,讀一遍可能能讀懂,但不可能完全領會其中的思想。掌握一個算法,并不是說將算法背過,而是掌握算法的思想。我們需要的是耐心。每看一遍就會有這一遍的收獲。讀懂算法之后,自己再默寫算法,寫到不會的地方,看看課本想想自己為什么沒有想到。對算法的應用上,學習算法的目的是利用算法解決實際問題。會寫課本上已有的算法之后,可以借其思想進行擴展,逐步提高編程能力。

四、對課程教學的建議

1、課程課時較緊,課堂上的練習時間較少,講解的東西越多,頭腦有時就很混亂。

2、感覺上課時的氣氛不是很好,雖然大部分人都在聽,可是效果不是很好。所以希望老師能在授課中間能穿插一些活躍課堂氛圍的話題,可以是大家都非常關心的一些內容,這樣既讓大家能在思考之余有一個放松,也能夠提高學生的學習積極性和學習效率。

3、學習的積極性很重要,有時候我們花了很長時間去寫實驗報告,也很認真的去理解去掌握,可是最后實驗報告可能就只得了一個c,抄的人反而得a,這樣的話很容易打擊學生的積極性,在后面的實驗報告中沒動力再去認真寫。所以希望老師能在這方面有所調整。

4、雖然講課的時間很緊,但是還是希望老師能在講述知識點的時候能運用實際的調試程序來給我們講解,這樣的話能讓我們對這些內容有更深刻的印象和理解。

數據結構與算法課程論文篇二

數據結構與算法課程小論文

10計本一班 王曉龍 1004011026 一. 內容概要:

如何合理地組織數據、高效地處理數據是擴大計算機領域、提高軟件效率的關鍵。在軟件開發過程中要求“高效地”組織數據和設計“好的”算法,并使算法用程序來實現,通過調試而成為軟件,必須具備數據結構領域和算法設計領域的專門知識。

本課程主要學習在軟件開發中涉及到的各種常用數據結構及其常用的算法,在此基礎上,學習如何利用數據結構和算法解決一些基本的應用問題。通過數據結構的邏輯結構、存儲結構、基本算法和相關應用問題來介紹其基本知識和應用知識。

二. 關鍵字:

數據結構:數據的邏輯結構、數據的存儲結構、基本算法;算法分析

三. 課程主要內容和基本原理:

a.數據結構:

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴于是否選擇了最優的數據結構。許多時候,確定了數據結構后,算法就容易得到了。有些時候事情也會反過來,我們根據特定算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。

(1).分類:

數據元素相互之間的關系稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬于一種類型外,別無其它關系。線性結構中元素之間存在一對一關系,樹形結構中元素之間存在一對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和后續結點數可以任意多個。

數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,并由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常借助于程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常借助于程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。

數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關系)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種隨機存取的存儲結構,線性表的鏈式存儲結構是一種順序存取的存儲結構。線性表若采用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。(2).四類基本結構:

⑴集合結構。該結構的數據元素間的關系是“屬于同一個集合”。⑵線性結構。該結構的數據元素之間存在著一對一的關系。⑶樹型結構。該結構的數據元素之間存在著一對多的關系。

⑷圖形結構。該結構的數據元素之間存在著多對多的關系,也稱網狀結構。從上面所介紹的數據結構的概念中可以知道,一個數據結構有兩個要素。一個是數據元素的集合,另一個是關系的集合。在形式上,數據結構通常可以采用一個二元組來表示。

(3).常用的數據結構:

a.數組: 在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱為數組。在c語言中,數組屬于構造數據類型。一個數組可以分解為多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字符數組、指針數組、結構數組等各種類別。b.棧:

是只能在某一端插入和刪除的特殊線性表。它按照先進后出的原則存儲數據,先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。c.隊列:

一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。d.鏈表:

是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。e.樹:

是包含n(n>0)個結點的有窮集合k,且在k中定義了一個關系n,n滿足以下條件:

(1)有且僅有一個結點 k0,他對于關系n來說沒有前驅,稱k0為樹的根結點。簡稱為根(root)。(2)除k0外,k中的每個結點,對于關系n來說有且僅有一個前驅。

(3)k中各結點,對關系n來說可以有m個后繼(m>=0)。f.圖:

圖是由結點的有窮集合v和邊的集合e組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。g.堆: 在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。h.散列表:

若結構中存在關鍵字和k相等的記錄,則必定在f(k)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關系f為散列函數(hash function),按這個思想建立的表為散列表。b.算法分析:

算法分析是對一個算法需要多少計算時間和存儲空間作定量的分析。算法是解題的步驟,可以把算法定義成解一確定類問題的任意一種特殊的方法。在計算機科學中,算法要用計算機算法語言描述,算法代表用計算機解一類問題的精確、有效的方法。算法+數據結構=程序,求解一個給定的可計算或可解的問題,不同的人可以編寫出不同的程序,來解決同一個問題,這里存在兩個問題:一是與計算方法密切相關的算法問題;二是程序設計的技術問題。算法和程序之間存在密切的關系。分析算法可以預測這一算法適合在什么樣的環境中有效地運行,對解決同一問題的不同算法的有效性作出比較。

四.心得體會:

在做完這次課程論文后,讓我再次加深了對數據結構與算法的理解,對數據結構的構建也有更深層次的體會。算法的每一次改進和提高,都凝聚著人類的智慧和辛勤勞動,每一次創新都給人類帶來了巨大的進步。數據結構與先進的算法能夠合理地組織數據、高效地處理數據,擴大計算機的應用領域,提高軟件的效率。這充分體現了其重要意義。

五. 參考文獻:

數據結構與算法王昆侖,李紅

數據結構與算法課程論文篇三

教學大綱

數據結構與算法(data structures)

計算機技術已成為現代化發展的重要支柱和標志,并逐步滲透到人類生活的各個領域。隨著計算機硬件的發展,對計算機軟件的發展也提出了越來越高的要求。由于軟件的核心是算法,而算法實際上是對加工數據過程的描述,所以研究數據結構對提高編程能力和設計高性能的算法是至關重要的。

非數值計算問題的數學模型不再是傳統的數學方程問題,而是諸如表、樹、圖之類的數據結構。因此,簡單地說,數據結構是一門研究非數值計算的程序設計問題的學科,主要研究數據的邏輯結構、存儲結構和算法。

一、教學目的與要求---了解數據的邏輯結構和物理結構;

教學要求在每章教學內容給出,大體上為三個層次:了解、掌握和熟練掌握。他們的含義大致為:了解是正確理解概念,掌握是學會所學知識,熟練掌握就是運用所學知識解決實際問題。

教學目的為:了解算法對于程序設計的重要性 ; 學習掌握基本數據結構的描述與實現方法,熟練掌握典型數據結構及其應用算法的設計。了解算法分析方法。

二、教學重點與難點--數據結構中基本概念和術語,算法描述和分析方法。

1、鏈表插入、刪除運算的算法。算法時間復雜度

2、后綴表達式的算法,數制的換算

利用本章的基本知識設計相關的應用問題

3、循環隊列的特點及判斷溢出的條件

利用隊列的特點設計相關的應用問題

4、串的模式匹配運算算法

5、二叉樹遍歷算法的設計

利用二叉樹遍歷算法,解決簡單應用問題 哈夫曼樹的算法

6、圖的遍歷

最小生成樹

最短路徑

7、二叉排序樹查找

平衡樹二叉樹

8、堆排序

快速排序 歸并排序

三、教學方法與手段-充分利用多媒體教學工具,配合黑板上的教學內容較難部分的算法實現過程演義

四、教學內容、目標與學時分配

教學內容 教學目標 課時分配

1、緒論

數據結構的內容

邏輯結構與存儲結構

算法和算法分析

2、線性表

線性表的定義與運算

線性表的順序存儲

線性表的鏈式存儲

3、棧

棧的定義與運算

棧存儲和實現

棧的應用舉例

4、隊列

隊列的定義與基本運算

隊列的存儲與實現

隊列的應用舉例

5、串

串的定義與基本運算

串的表示與實現

串的基本運算

6、樹和二叉樹

樹的定義和術語

二叉樹樹的基本概念和術語 遍歷二叉數和線索二叉樹

二叉樹的轉換

二叉樹的應用

哈夫曼樹及其應用

7、圖

圖的定義和術語

圖的存儲結構

圖的遍歷算法

圖的連通性

8、查找

查找的基本概念與靜態查找 動態查找

哈希表

了解

了解

掌握

熟練掌握順序表存儲地址的計算

掌握單鏈表的結構特點和基本運算

掌握雙鏈表的結構特點和基本運算

掌握棧的定義與運算

掌握棧的存儲與實現

熟練掌握棧的各種實際應用

掌握隊列的定義與基本運算

熟練掌握隊列的存儲與實現

掌握循環隊列的特征和基本運算

了解串的邏輯結構

掌握串的存儲結構

熟練掌握串的基本運算

了解

了解二叉樹

熟練掌握二叉樹定義和存儲結構

了解二叉樹的遍歷算法

掌握

掌握哈夫曼的建立及編碼

了解

了解

熟練掌握

熟練掌握

了解

熟練掌握

了解哈希表與哈希方法

4學時

1學時

1學時

2學時

8學時

2學時

2學時

4學時

8學時

2學時

2學時

4學時

6學時

2學時

2學時

2學時

6學時

2學時

2學時

2學時

12學時

2學時

2學時

2學時

2學時

2學時

2學時

8學時

2學時

2學時

2學時

2學時

8學時

4學時

2學時

2學時

9、排序

12學時 插入排序

熟練掌握基本思想

3學時 快速排序

了解各種內部排序方法和特點

3學時 選擇排序

掌握

2學時 各種排序方法比較

掌握

2學時

實驗內容 實驗目標 課時分配 算法編程實驗:

1、用指針方式編寫程序 復習c(c++)語言指針、結構體等的用法

2、對單鏈表進行遍歷

鏈表的描述與操作實現

3、棧及其操作

描述方法及操作

4、編寫串子系統1 串的特點及順序定長存儲、操作、查找

5、編寫串子系統 2 串的特點及順序定長存儲、操作、查找

6、編寫樹子系統1 二叉樹的特點及存儲方式、創建、顯示、遍歷等

7、編寫樹子系統2 二叉樹的特點及存儲方式、創建、顯示、遍歷等

8、圖子系統

圖的鄰接矩陣的存儲、遍歷、廣度/深度優先搜索

9、查找子系統

理解查找基本算法、平均查找長度、靜態、動態查找等

五、考試范圍與題型

1、考試范圍與分數比例

1)緒論

12% 2)線性表

17% 3)棧

7% 4)隊列

6% 5)串

4% 6)樹和二叉樹

14% 7)圖

15% 8)查找

4% 9)排序

21%

2、考試題型與分數比例

1)名詞解釋

18% 2)判斷對錯

16% 3)填空

16% 4)單項選擇

18% 5)應用

32%

六、教材與參考資料

1、教材: 實用數據結構基礎(譚浩強)中國鐵道出版社

2、參考資料: 數據結構(嚴蔚敏)清華大學出版社

數據結構實用教程(徐孝凱)清華大學出版社

(撰寫人:

,審核人: 2學時 2學時 2學時 2學時 2學時 2學時 2學時 2學時 2學時)

數據結構與算法課程論文篇四

“數據結構與算法”課程學習總結報告

1004012033 陳孝婕 10計本3 “數據結構與算法”這門課程對于計算機科學與技術系的學生來說是非常重要的課程。這門課程主要包括十個章節。

一.每章主要知識點總結和個人掌握情況

第一章主要要求學生掌握數據、數據類型、數據結構、算法及算法分析等基本概念和基礎知識。另外,第一章結合課程學習要求,復習和掌握算法描述工具--c語言中的指針類型與指針變量、結構類型與結構變量、函數與參數、遞歸定義和遞歸函數、動態存儲分配、文件操作、程序測試和測試集、測試數據的設計和程序調試等問題。

從這一章中我不僅學到了數據結構的基本概念和基礎知識,了解到什么是數據結構,我們為什么要學習數據結構這門課程。而且復習了大一下學期所學的c語言程序課程設計中的算基本法語句。有利于數據結構與算法后面課程的學習。

第二章主要學習順序表(包括順序串)數據類型、數據結構、基本算法及相關應用。知識點包括順序表的概念、數據結構定義、數據類型描述、基本算法的實現及其性能的分析等知識;還有“查找”和“排序”的概念,“查找”包括3種查找方式:簡單順序查找、二分查找、分塊查找;“排序”包括直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序和歸并排序(重點為二路歸并排序)6種排序方式;掌握應用順序表來進行查找和排序的各類算法以及不同的查找和排序算法間的性能差異。在此基礎上,理解順序串的相關應用。

從這一章中我學習到各種不同的查找方法和排序方式,其中二分查找作為重點查找方法我進行了重點學習,熟悉并熟練地運用二分查找并且了解到各種排序方法適合于不同的順序表。對于順序串的學習,我主要掌握了字符串的基本運算,包括:求串長strlen(s)、連接stract(st1,st2)、求子串substr(s,i,j)、比較串的大小strcmp(s,t)、插入insert(s1,i,s2)、刪除delete(s,i,j)、子串定位index(s1,s2)、置換(replace(s1,i,j,s2)、replace(s,t,v)兩種)。

第三章主要學習鏈表(單聊表、循環鏈表)的概念、數據結構、數據類型描述、基本算法以及鏈表相關應用。需要掌握各種鏈表的概念、數據結構定義、基本算法實現以及算法的性能分析等知識,掌握鏈表的相關應用方法,在此基礎上掌握鏈串的相關知識。

通過這一章我學習了另一種數據結構——鏈表,在邏輯結構上,鏈表與順序表一樣,也是線性邏輯結構;單鏈表借助“地址”的概念,使用了鏈式存儲結構,產生了一種新的數據結構——鏈表,鏈表的基本操作是地址運算,在此基礎上構成的鏈表基本算法的特點也就不同,從鏈表算法的功能看,鏈表的基本運算與順序表基本相同,但實現方法和過程與順序表是不同的,鏈表可分為靜態鏈表和動態鏈表兩種。這一章我學習到的實際應用是鏈表的創建、插入和刪除等基本操作。循環鏈表的建立和查詢方法。

第四章主要知識點是在兩種不同的存儲結構下設計的堆棧,即順序棧和鏈棧。主要內容是順序棧和鏈棧的概念、數據類型、數據結構定義和基本運算算法及其性能分析。通過對本章的學習,要求掌握順序棧及鏈棧的數據類型描述、數據結構、基本算法及其性能分析等知識。在此基礎上,了解堆棧的相關應用,掌握應用堆棧解決實際問題的思想及方法。

通過對這一章的學習,我了解了堆棧的概念,堆棧的原理、創建方法以及使用方式。“后進先出”是其基本原則。利用堆棧可以輕松方便的解決對稱問題以及括號匹配等問題。堆棧與順序表、鏈表不同的是,堆棧只能對一端的數據元素進行操作,即只在棧頂進行元素的插入和刪除。掌握順序棧和鏈表的存儲結構是學習堆棧的要素之一。堆棧是一類常用的數據結構,被廣泛應用于各種程序設計中。

第五章的重點知識是在順序存儲和鏈接存儲下的兩種隊列——順序(循環)隊列和鏈隊

列的數據結構、基本運算及其性能分析以及應用。通過本章的學習,要求掌握順序隊列(重點是循環隊列)及鏈隊列的概念、數據類型描述、數據結構、基本算法及其性能分析等知識。在此基礎上,了解隊列的相關應用,掌握應用隊列來解決實際問題的思想及方法。

通過這一章的學習,我掌握了隊列的定義,概念,創建以及“對頭刪除”,“隊尾插入”的原則。重點了解了判斷循環隊列空和滿的判斷條件。同堆棧一樣,隊列也是一種具有線性邏輯結構、運算受限制的數據結構。與堆棧只在一端(棧頂)進行元素的插入和刪除運算不同的是,隊列是在對頭進行插入,而在隊尾完成數據元素的刪除,所以隊列的算法和適用的應用問題與堆棧有很大的區別。隊列作為一類常用的數據結構,被廣泛應用于各種程序設計中。

第六章主要學習數組、系數矩陣和廣義表的基本概念、集中特殊矩陣的存儲結構及基本運算,在此基礎上學習特殊矩陣的計算算法與廣義表應用等相關問題。通過本章的學習,要求掌握特殊矩陣的壓縮存儲結構,在該存儲結構下元素的定位方法,理解稀疏矩陣的計算和廣義表的存儲結構及其基本運算。了解矩陣與廣義表的相關應用。

通過這章的學習和前幾章的比較,我了解到前幾章的線性結構中的數據元素都是非結構的原子類型,即每一個元素都是不可再分解的。本章討論的數組和廣義表等數據結構可以看成是在前幾章線性結構基礎上的一個擴展:組成該數據結構的數據元素本身也是一個數據結構。矩陣計算應該數值計算方面的問題,由于矩陣和數組的關系以及特殊矩陣存儲結構的復雜性,進而使得特殊矩陣的存儲結構和算法也表現出其特殊性,所以數據機構課程應該解決其計算問題。

第七章的學習重點是二叉樹的概念、數據類型、數據結構定義和各種基本算法,在此基礎上介紹二叉樹的一些應用問題。通過本章的學習,我掌握了二叉樹概念及其性質、二叉樹的邏輯結構和存儲結構等知識,掌握二叉樹的建立、遍歷、線索化等基本概念和算法及性能分析,能熟練應用二叉樹這章結構來解決一些實際問題,如哈夫曼樹及哈夫曼編碼、查找與排序(二叉樹排序)等問題。了解堆棧排序及其算法等知識。二叉樹是非線性數據結構,是樹形結構的一種特殊形式。在現實生活有許多數據關系可抽象為樹或二叉樹的形式。本章中的二叉樹的概念及其性質、二叉排序樹、存儲結構、遍線索(化)、基本算法為重點內容,二叉排序樹的應用為難點內容。

第八章的學習重點是樹和森林的數據結構、基本算法及其性能分析,樹和森林與二叉樹間的轉化算法等,在此基礎上介紹樹的應用——b-樹。通過本章的學習,我掌握了樹和森林的概念和性質、數據結構、樹的基本算法及性能分析、樹與二叉樹間的轉換及其算法,并能應用b-樹來實現數據元素的動態查找。舒適一種非線性結構,它在二叉樹的基礎上做了更為一般化的擴展,而森林是樹的集合。在樹結構中,每一個元素最多只有一個前驅,但可能有多個后繼。現實生活中的家族關系、單位的組成結構等,均可抽象為樹的形式。

第九章學習重點是散列結構的相關知識,學習常用的散列函數和沖突處理方法,散列表的常用算法及其性能分析,通過本章的學習,我掌握了散列結構和散列函數的相關概念,掌握散列結構的存儲(散列表)的相關概念,要求掌握散列沖突處理方法(散列法)的相關知識,并能靈活運用散列法解決應用問題。

散列結構是使用散列函數建立數據結點關鍵字與存儲地址之間的對應關系并提供多種當數據節點存儲地址發生“沖突”時的處理方法而建立的一種數據結構。散列結構的查找等運算效率是很高的,本章中的散列函數、散列結構、散列表、散列法的基本概念和基本算法是重點,線性探測散列算法、鏈地址法散列算法和散列法的應用是難點。

第十章的學習重點是圖的定義及性質,圖的四種存儲結構,圖的兩種遍歷算法以及圖的典型應用,包括最小生成樹、最短路徑、拓撲排序和關鍵路徑等。通過本章學習,我掌握了圖的概念和基本性質,圖的存儲結構(鄰接矩陣和鄰接表)及其基本算法、圖的遍歷及算法、圖的最小生成樹普利姆算法或者克魯斯卡爾算法、圖的最短路徑迪杰斯特拉算法和弗洛伊德算法、有向無環圖拓撲排序算法。了解了圖的逆鄰接表、十字鏈表、鄰接多重表存儲結構及其基本算法、關鍵路徑求解算法,并能靈活運用圖的不同的數據結構和遍歷算法解決復雜的應用問題。

二.課程學習體會

在學習開始的時候,老師就明確提出它不是一種計算機語言,不會介紹c語言的變成語言,而是通過學習可以設計出良好的算法,高效地組織數據。一個程序無論采用何種語言,其基本算法思想不會改變。聯系到在大一和大二上學期學習的c和c++語言,我深刻認識到了這一點。“軟件開發好比寫作文,計算機語言提供了許多華麗的辭藻,而數據結構則考慮如何將這些辭藻組織成一篇優秀的文章來。”在學習這門課中,要熟悉對算法思想的一些描述手段,包括文字描述、圖形描述和計算機語言描述等。因此,計算機語言基礎是必須的,因為它提供了一種重要的算法思想描述手段——機器可識別的描述。

這門課結束之后,我總結了學習中遇到的一些問題,最為突出的,書本上的知識與老師的講解都比較容易理解,但是當自己采用剛學的知識點編寫程序時卻感到十分棘手,有時表現在想不到適合題意的算法,有時表現在算法想出來后,只能將書本上原有的程序段謄寫到自己的程序中再加以必要的連接以完成程序的編寫。針對這一情況,我會嚴格要求自己,熟練掌握算法思想,盡量獨立完成程序的編寫與修改工作,只有這樣,才能夠提高運用知識,解決問題的能力。

三.對《數據結構與算法》課程教學的建議

1、建議在上課過程中加大隨堂練習的分量,以便學生能當堂消化課堂上學習的知識,也便于及時了解學生對知識點的掌握情況,同時有助于學生上課積極思考,不會開小差。

2、建議在課時允許的情況下,增加習題課的分量,通過課堂的習題講解,加深對知識點的掌握,同時對各知識點的運用有一個更為直觀和具體的認識。

以上便是我對《數據結構與算法》這門課的學習總結,我會抓緊時間將沒有吃透的知識點補齊。今后我仍然會繼續學習,克服學習中遇到的難關,在打牢基礎的前提下向更深入的層面邁進!

數據結構與算法課程論文篇五

金陵科技學院實驗報告

學 生 實 驗 報 告 冊

課程名稱:

學生學號:

所屬院部:計算機工程學院

(理工類)

算法與數據結構 專業班級: 計算機統招(1)班

1413101006 學生姓名: 邢亦波

指導教師: 徐永華 15 ——20 16 學年 第 2 學期

金陵科技學院教務處制

金陵科技學院實驗報告

實驗報告書寫要求

實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。

實驗報告書寫說明

實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。

填寫注意事項

(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。

(3)盡量采用專用術語來說明事物。

(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。

實驗報告批改說明

實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。

實驗報告裝訂要求

實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。

金陵科技學院實驗報告

實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 無 實驗地點: 實驗日期: 04.05 實驗成績: 批改教師: 徐永華 批改時間:

金陵科技學院實驗報告

實驗1 順序表

一、實驗目的和要求

掌握順序表的定位、插入、刪除等操作。

二、實驗儀器和設備

turbo c 2.0

三、實驗內容與過程(含程序清單及流程圖)

1、必做題

(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。編寫主函數測試結果。

(2)編寫順序表定位操作子函數,在順序表中查找是否存在數據元素x。如果存在,返回順序表中和x值相等的第1個數據元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。

解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。

(4)刪除順序表中所有等于x的數據元素。

2、選做題

(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。

金陵科技學院實驗報告

程序清單: 1.(1)

#include

#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){

} void display(shun *s){

} main()int i;if(s->length==0)printf(“沒有數據n”);else for(i=0;i

length;i++){ } printf(“%-5d”,s->a[i]);int i,j;printf(“需要幾個數n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數n”);scanf(“%d”,&s->length);} for(i=0;i

length;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);

金陵科技學院實驗報告

{

} init(&s);setup(&s);display(&s);

1.(2)

#include

#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){

} int find(shun *s,int x){ int i;for(i=0;i

length;i++){ int i,j;printf(“需要幾個數n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數n”);scanf(“%d”,&s->length);} for(i=0;i

length;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);

金陵科技學院實驗報告

if(s->a[i]==x)return i;} return 0;} void display(shun *s){

} main(){

} int x;init(&s);setup(&s);display(&s);printf(“輸入xn”);scanf(“%d”,&x);if(find(&s,x))printf(“找到位置是%dn”, find(&s,x));printf(“-1n”);else int i;if(s->length==0)printf(“沒有數據n”);else for(i=0;i

length;i++){ } printf(“%-5d”,s->a[i]);

1.(3)#include

#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ s->length=0;

金陵科技學院實驗報告

} void setup(shun *s){

} void insert(shun *s,int x){ int i,j;if((s->length+1)>=maxsize){ printf(“溢出n”);exit(0);int i,j;printf(“需要幾個數n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數n”);scanf(“%d”,&s->length);} for(i=0;i

length;i++){ } scanf(“%d”,&s->a[i]);printf(“溢出n”);} for(i=0;i

length;i++){ if(s->a[i]>=x)break;} for(j=s->length-1;j>=i;j--){ s->a[j+1]=s->a[j];} s->a[i]=x;s->length++;} void display(shun *s){

int i;if(s->length==0)printf(“沒有數據n”);else for(i=0;i

length;i++)

金陵科技學院實驗報告

} main(){

} int x;init(&s);setup(&s);printf(“輸入xn”);scanf(“%d”,&x);insert(&s,x);display(&s);{ } printf(“%-5d”,s->a[i]);

1.(4)#include

#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){

int i,j;printf(“需要幾個數n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數n”);scanf(“%d”,&s->length);s->length=0;printf(“溢出n”);

金陵科技學院實驗報告

} void delet(shun *s,int x){ int i,j;for(i=0;i

length;i++){

} void display(shun *s){

} main(){

} int x;init(&s);setup(&s);printf(“輸入xn”);scanf(“%d”,&x);delet(&s,x);display(&s);int i;if(s->length==0)printf(“沒有數據n”);else for(i=0;i

length;i++){ } printf(“%-5d”,s->a[i]);if(s->a[i]==x){

for(j=i;j

length;j++){ s->a[j]=s->a[j+1];} s->length--;i--;} for(i=0;i

length;i++){ } scanf(“%d”,&s->a[i]);} }

金陵科技學院實驗報告

2.#include

#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun a,b,c;void init(shun *s){ } void setup(shun *s){

} } int i,j,t;printf(“需要幾個數n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數n”);scanf(“%d”,&s->length);} for(i=0;i

length;i++){ } for(i=0;i

length;i++){

for(j=i+1;j

length;j++){

} if(s->a[i]

a[j]){

} t=s->a[i];s->a[j]=t;s->a[i]=s->a[j];scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);

金陵科技學院實驗報告

void cat(shun *a,shun *b){ int i,j=0,t;if((a->length+b->length)>=maxsize){

} for(i=0;ilength;i++){ } for(j=0;j

length;j++){

} =a->length+b->length;

} void display(shun *s){

} int i;if(s->length==0)printf(“沒有數據n”);else for(i=0;i

length;i++){ } printf(“%-5d”,s->a[i]);} for(i=0;i

for(j=i+1;j

} if(c.a[i]

} t=c.a[i];c.a[j]=t;c.a[i]=c.a[j];c.a[i]=b->a[j];i++;c.a[i]=a->a[i];printf(“溢出n”);exit(0);

金陵科技學院實驗報告

main(){

} init(&a);printf(“a初始化n”);setup(&a);init(&b);setup(&b);cat(&a,&b);display(&c);printf(“b初始化n”);

金陵科技學院實驗報告

四、實驗結果與分析(程序運行結果及其分析)1.(1)

1.(2)

金陵科技學院實驗報告

1.(3)

1.(4)

金陵科技學院實驗報告

2.金陵科技學院實驗報告

五、實驗體會(遇到問題及解決辦法,編程后的心得體會)

我覺得編程不能只要完成其主要功能就行了,還要考慮到邊界值,考慮是否會出錯等等。有時候一種方法編不通,不如換種方法編。我覺得編程挺考慮耐心的,恩,就這么多感悟了。

金陵科技學院實驗報告

實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

金陵科技學院實驗報告

實驗2 單鏈表

一、實驗目的和要求

1、實驗目的

掌握單鏈表的定位、插入、刪除等操作。

2、實驗要求

(1)注意鏈表的空間是動態分配的,某結點不用之后要及時進行物理刪除,以便釋放其內存空間。

(2)鏈表不能實現直接定位,一定注意指針的保存,防止丟失。

二、實驗儀器和設備

turbo c 2.0

三、實驗內容與過程(含程序清單及流程圖)

1、必做題

(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數據元素。(2)在遞增有序的單鏈表中插入一個新結點x,保持單鏈表的有序性。

解題思路:首先查找插入的位置然后進行插入操作;從第一個結點開始找到第一個大于該新結點值的結點即為插入位置;然后在找到的此結點之前插入新結點;注意保留插入位置之前結點的指針才能完成插入操作。

(3)編寫實現帶頭結點單鏈表就地逆置的子函數,并編寫主函數測試結果。

2、選做題

已知指針la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一算法實現,從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:

1.(1)

#include

#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s)

金陵科技學院實驗報告

{

} void display(list *head){ list *rear;if(head==null){

} } main(){

list *head;head=setup(s);display(head);free(s);rear=head;printf(“%c”,rear->a);while(rear->next!=null){

} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數據n”);else list *head=null;list *rear=null;

char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){

} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;

金陵科技學院實驗報告

} free(head);1.(2)#include

#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s){

} void paixu(list *head){

list *rear;list *p;datatype min;if(head==null){ list *head=null;list *rear=null;

char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){

} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;

金陵科技學院實驗報告

} void insert(list *head,datatype x){

list *p;list *q;list *r;if(head==null)printf(“空表n”);p=head;q=head;r=malloc(sizeof(list));r->a=x;while(p->next!=null){

} while(q->next!=p)q=q->next;r->next=p;q->next=r;if(p->next==null)if(x

a){ } p=p->next;break;} p=head;

while(p->next!=null){

do {

rear=rear->next;if(min>rear->a){

} min=rear->a;rear->a=p->a;p->a=min;

min=p->a;rear=p;printf(“空表!n”);exit(0);} while(rear->next!=null);p=p->next;}

金陵科技學院實驗報告

} void display(list *head){ list *rear;if(head==null){

} } main(){

} datatype x,c;list *head;head=setup(s);paixu(head);printf(“請輸入xn”);c=getchar();x=getchar();insert(head,x);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){

} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數據n”);else p->next=r;1.(3)#include

#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;

金陵科技學院實驗報告

list *setup(list *s){

} list *nizhi(list *head){

list *h;list *rear;int i=0;char b[100];h=malloc(sizeof(list));h->next=head;rear=head;do {

b[i]=rear->a;rear=rear->next;i++;list *head=null;list *rear=null;

char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){

} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;}while(rear->next!=null);b[i]=rear->a;rear=head;for(;i>=0;i--){

} rear->a=b[i];rear=rear->next;

金陵科技學院實驗報告

} void display(list *head){ list *rear;if(head==null){

} } main(){

} list *head;head=setup(s);head=nizhi(head);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){

} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數據n”);else return head;2.#include

#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s1;list *s2;list *setup(list *s){

list *head=null;list *rear=null;

char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$')

金陵科技學院實驗報告

} void dein(list *la,list *lb,int i,int len,int j){

int k;list *rear;list *t;list *h;list *r;list *q;h=null;rear=la;q=la;for(k=1;k!=i;k++){

} while(q->next!=rear){

t=malloc(sizeof(list));t->a=rear->a;if(h==null)h=t;q=q->next;for(k=1;k<=len;k++)rear=rear->next;if(rear->next==null&&k!=i){

} printf(“沒找到i的位置n”);exit(0);

{

} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;

金陵科技學院實驗報告

} void display(list *head){ list *rear;if(head==null){

rear=head;printf(“%c”,rear->a);while(rear->next!=null){

} printf(“n”);rear=rear->next;printf(“%c”,rear->a);printf(“沒有數據n”);else

} q->next=rear;if(r!=null)r->next=null;rear=lb;for(k=1;k!=j;k++){

} q=lb;while(q->next!=rear)q=q->next;r->next=rear;q->next=h;rear=rear->next;if(rear->next==null&&k!=j){

} printf(“沒找到j的位置n”);exit(0);else r->next=t;r=t;rear=rear->next;if(rear->next==null&&k

} printf(“len太長n”);exit(0);

金陵科技學院實驗報告

} } main(){ char c;

} list *la;list *lb;int i,len,j;printf(“建立單鏈表lan”);la=setup(s1);printf(“建立單鏈表lbn”);lb=setup(s2);printf(“請輸入要刪的位置in”);scanf(“%d”,&i);printf(“請輸入要刪減的數據長度lenn”);scanf(“%d”,&len);printf(“請輸入要插入的位置jn”);scanf(“%d”,&j);dein(la,lb,i,len,j);printf(“顯示lan”);display(la);printf(“顯示lbn”);display(lb);free(la);free(lb);c=getchar();

金陵科技學院實驗報告

四、實驗結果與分析(程序運行結果及其分析)1.(1)

金陵科技學院實驗報告

1.(2)

1.(3)

金陵科技學院實驗報告

2.金陵科技學院實驗報告

五、實驗體會(遇到問題及解決辦法,編程后的心得體會)

單鏈表以前沒怎么編過,所以現在編有點陌生,要編譯好幾次才能運行。我覺得還是不能光看書,還要多編幾道題比較有手感。

金陵科技學院實驗報告

實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

金陵科技學院實驗報告

實驗3 堆棧和隊列

一、實驗目的和要求

(1)掌握應用棧解決問題的方法。(2)掌握利用棧進行表達式求和的算法。

(3)掌握隊列的存儲結構及基本操作實現,并能在相應的應用問題中正確選用它們。

二、實驗儀器和設備

turbo c 2.0

三、實驗內容與過程(含程序清單及流程圖)

1、必做題

(1)判斷一個算術表達式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。

(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結束符的字符序列是否是“回文”。

2、選做題

在順序存儲結構上實現輸出受限的雙端循環隊列的入列和出列算法。設每個元素表示一個待處理的作業,元素值表示作業的預計時間。入隊列采取簡化的短作業優先原則,若一個新提交的作業的預計執行時間小于隊頭和隊尾作業的平均時間,則插入在隊頭,否則插入在隊尾。程序清單:

1.(1)

#include

#include

char a[100];int panduan(char *a){

int i,k,count1=0,count2=0;for(i=0;a[i]!='';i++){ {

count1++;for(k=i+1;a[k]!='';k++){ if(a[k]==')')if(a[i]=='(')

金陵科技學院實驗報告

} main(){

} printf(“請輸入算式n”);gets(a);if(panduan(a)==1){ } else printf(“算式()不配對n”);printf(“算式()配對n”);

break;} if(a[k]=='')return 0;} if(a[i]==')')} if(count1!=count2)return 0;return 1;count2++;1.(2)

#include

int i;void move(int n,char a,char c){ printf(“第%d步:將%d號盤子%c--->%cn”,i++,n,a,c);} void hanno(int n,char a,char b,char c){

} main(){ if(n==1){

} hanno(n-1,a,c,b);move(n,a,c);hanno(n-1,b,a,c);move(1,a,c);else

金陵科技學院實驗報告

} int n;char a,b,c;printf(“請輸入要移動的盤子數n”);scanf(“%d”,&n);a='a';b='b';c='c';hanno(n,a,b,c);1.(3)

#include

#include

char s[100];int huiwen(char s[]){

} main(){

while(1){ printf(“請輸入字符直到@n”);gets(s);if(huiwen(s))

} printf(“是回文n”);printf(“不是回文n”);else int i,j=0;char b[100];for(i=0;s[i]!='@';i++);for(i=i-1;i>=0;i--){

} j=0;for(i=0;s[i]!='@';i++){ } return 1;return 0;b[j]=s[i];j++;if(s[i]!=b[j])j++;

金陵科技學院實驗報告

}

2.#include

#define maxsize 100 typedef struct duilie {

int a[maxsize];int head;int rear;}dui;dui *s;void init(dui *s){

} void setup(dui *s,int x){

if(x<((s->a[s->head]+s->a[s->rear])/2)){

} else { s->rear=(s->rear++)%maxsize;s->head=(s->head--)%maxsize;s->a[s->head]=x;s->head=maxsize-1;s->rear=maxsize-1;s->a[s->head]=0;s->a[s->rear]=0;

金陵科技學院實驗報告

} } s->a[s->rear]=x;void display(dui *s){

printf(“s隊為:”);while(s->head==s->rear){ printf(“%-3d”,s->a[s->head]);

} main(){

} int x;while(1){ printf(“請輸入x直到0n”);scanf(“%d”,&x);setup(s,x);if(x==0)} if(s->head!=(s->rear+1)%maxsize)printf(“隊滿n”);display(s);break;} s->head=(s->head++)%maxsize;

金陵科技學院實驗報告

四、實驗結果與分析(程序運行結果及其分析)1.(1)

金陵科技學院實驗報告

1.(2)

1.(3)

金陵科技學院實驗報告

五、實驗體會(遇到問題及解決辦法,編程后的心得體會)

金陵科技學院實驗報告

實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

金陵科技學院實驗報告

實驗4 串

一、實驗目的和要求

掌握串的存儲及應用。

二、實驗儀器和設備

turbo c 2.0

三、實驗內容與過程(含程序清單及流程圖)

1、必做題

(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數,并用主函數測試結果。

(2)編寫輸出字符串s中值等于字符ch的所有字符的函數,并用主函數測試結果。

解題思路:可以將第一題程序改進成一個子函數,在本題中循環調用。(3)設字符串采用單字符的鏈式存儲結構,編程刪除串s從位置i開始長度為k的子串。

2、選做題

假設以鏈結構表示串,編寫算法實現將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯接在串t的末尾。

提示:為提高程序的通用性,插入位置字符應設計為從鍵盤輸入。程序清單:

1.(1)

#include

#include

void fun(char s[],char ch){

int i;for(i=0;s[i]!='';i++){

} printf(“沒找到n”);if(ch==s[i]){

} printf(“找到字符%c在位置%dn”,s[i],i+1);exit(0);

金陵科技學院實驗報告

} main(){

} char s[100],ch;printf(“請輸入字符串sn”);gets(s);printf(“請輸入要查找的字符chn”);scanf(“%c”,&ch);fun(s,ch);1.(2)

#include

#include

char s[100];void fun(char s[],char ch){ int i;if(strcmp(s,“")==0){ printf(”字符串s為空n“);exit(0);} for(i=0;s[i]!='';i++){

} main(){ char ch;printf(”請輸入字符串sn“);gets(s);printf(”請輸入要查找的chn“);scanf(”%c“,&ch);fun(s,ch);} if(ch==s[i])printf(” %c“,s[i]);} 1.(3)

金陵科技學院實驗報告

#include

#include

typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s;chuan *setup(chuan *s){

} void delet(chuan *chu,int i,int k){

int j;chuan *p;chuan *t;if(chu==null){

} p=chu;for(j=1;j

c=ch;if(head==null){ } else

} if(rear!=null)rear->next=null;return head;rear->next=s;rear=s;head=s;s=malloc(sizeof(chuan));ch=getchar();

金陵科技學院實驗報告

}

void display(chuan *chu){ chuan *p;

} main(){

int i,k;chuan *head;head=setup(s);printf(”請輸入要刪除字符的位置in“);scanf(”%d“,&i);p=chu;if(chu==null){

} printf(”%c“,p->c);while(p->next!=null){

} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);{

} t=p->next;for(j=1;j

} p->next=t;if(p->next==null&&j

} t=t->next;printf(”串長度太小,無法刪除%d個元素n“,k);exit(0);if(p->next==null&&j

} p=p->next;printf(”無法找到第%d位置n“,i);exit(0);

金陵科技學院實驗報告

printf(”請輸入要刪除字符的個數kn“);scanf(”%d“,&k);delet(head,i,k);display(head);free(head);free(s);} 2.#include

#include

typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s,*t;chuan *setup(chuan *chu){

chuan *head=null;chuan *rear=null;char ch;printf(”請輸入字符ch直到$n“);ch=getchar();while(ch!='$'){ chu=malloc(sizeof(chuan));

chu->c=ch;if(head==null){ head=chu;

金陵科技學院實驗報告

} } else rear->next=chu;rear=chu;ch=getchar();} if(rear!=null)rear->next=null;return head;

void insert(chuan *s1,chuan *s2,char x){

chuan *p;chuan *q;p=s1;if(s1==null){

} {

} while(p->next!=null){ if(p->c==x)break;printf(”s是空串n“);exit(0);if(s2==null)printf(”t是空串n“);exit(0);

金陵科技學院實驗報告

} } p=p->next;if(p->next==null)p->next=s2;else {

} q=s2;while(q->next!=null)q=q->next;q->next=p->next;p->next=s2;void display(chuan *chu){ chuan *p;

} p=chu;if(chu==null){

} printf(”%c“,p->c);while(p->next!=null){

} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);

金陵科技學院實驗報告

main(){

char x,c;printf(”建立單鏈串tn“);t=setup(t);c=getchar();printf(”建立單鏈串sn“);s=setup(s);c=getchar();printf(”請輸入要在什么字符后插入n");x=getchar();

}

insert(t,s,x);display(t);

全文閱讀已結束,如果需要下載本文請點擊

下載此文檔
a.付費復制
付費獲得該文章復制權限
特價:5.99元 10元
微信掃碼支付
已付款請點這里
b.包月復制
付費后30天內不限量復制
特價:9.99元 10元
微信掃碼支付
已付款請點這里 聯系客服
主站蜘蛛池模板: 日日躁夜夜躁狠狠天天 | 成年人视频在线免费播放 | 免费看污视频的软件 | 国产成人咱精品视频免费网站 | 日日操人人 | 伊人精品国产 | 夜夜嗨视频网 | 日本在线中文 | 午夜欧美福利视频 | 欧美猛交xxxx免费看 | 天天干天天曰 | 色5月综合| 五月综合在线 | 99在线观看视频 | 日韩a级毛片免费视频 | 黄片毛片视频 | 国产亚洲精品自在久久77 | 中文字幕日本在线观看 | 国产日韩在线看 | 欧美一级在线观看视频 | 1769亚洲资源站365在线 | 性欧美.video.free | 欧美怡红院免费的视频 | 欧美一级网| 欧美精品一区二区精品久久 | 亚洲成精品动漫久久精久 | 色狠狠狠色噜噜噜综合网 | 欧美日韩精品在线播放 | 全色黄大色大片免费久久老太 | 成人深夜福利在线播放不卡 | 成年人福利网站 | 一级毛片人与动免费观看 | 永久黄网站色视频免费观看99 | 久久精品国产91久久麻豆自制 | 五月婷婷激情综合 | 欧美乱理伦另类视频 | 曰批全过程免费视频观看软件 | 成年午夜一级毛片视频 | 精品91自产拍在线观看99re | 国产精品欧美一区二区三区 | 国产精品无圣光一区二区 |