資料結構 浙大MOOC 筆記二 線性結構

2022-08-24 07:54:08 字數 2361 閱讀 6280

線性表及其表現

第二章的內容是關於三種最基本的資料結構 結合《ddsa》第三章 表、棧和佇列做乙個總結

首先簡單說明一下各個資料結構的特點:

陣列:連續儲存,遍歷快且方便,長度固定,缺點是刪除和新增資料需要移動(1,n)個資料,時間複雜度高

鍊錶:離散儲存,新增和刪除方便,空間和時間消耗大,雙向鍊錶比單向的靈活,但是空間耗費也更大

hash表:資料離散儲存,利用hash 演算法決定儲存位置,遍歷比較麻煩。 

二叉樹: 一般的查詢遍歷,有深度優先和廣度優先兩種,遍歷分前序、中序、後序遍歷,效率都差不多。但是如果資料經過排序,則二叉樹查詢效率還是不錯的。

圖: 表示物件與物件之間的關係的數學物件,常用遍歷方式為深度優先遍歷和廣度優先遍歷,這兩種遍歷方式對有向圖和無向圖都適用,但是遍歷查詢不及前面任一種資料結構。

mooc的課件首先由多項式的計算為例來引入了鍊錶這一資料結構。多項式計算的關鍵在於儲存關鍵資料 1.多項式項數n 2.各項係數a 3.指數i

方法1 陣列儲存結構直接表示

因為存在係數為0的項,所以會造成空間的浪費。改進得到方案2,順序儲存結構只表示非零項,

方法三:鍊錶結構儲存非零項

鍊錶結構

typedef 命令梳理 

typedef : you can use it to give a type, a new name.

1

struct

books;78

intmain() book;

2223

intmain()

17 }

刪除例程 

插入:先構造結點,p指向 n-1 的結點, 再修改帶插入元素的指標

插入圖例

1

void

insert(elementtype x, list l, position p)

2;

鍊錶實現基本的結構體組成

1

struct

stackrecord

2;

陣列實現的基本結構體組成

push 的鍊錶實現

push 的陣列實現

pop的鍊錶實現

pop的陣列實現

棧的應用例項:

中綴表示式與字尾表示式的轉換

掃瞄中綴表示式中個各個元素,運算數直接輸出,運算符號存放在棧中,根據運算優先順序確定pop 和push的先後順序

字尾表示式的特點 遍歷各元素,遇到運算子後計算與運算子最鄰近的兩個元素

優先順序大的壓棧,可以先出,左括號運算子優先順序大於 * / 但是右括號返回至左括號的所有內容

2.3 佇列

佇列: 具有一定操作約束的線性表 插入和刪除操作:只能在一端插入,而在另一端刪除

抽象資料型別:

queue creatqueue(int maxsize) : 生成長度maxsize 的空佇列

int isfullq( queue q, int maxsize):  判斷佇列q是否已滿

void addq( queue q, elementtype item): 將資料元素item 插入佇列q中

int isemptyq( queue q): 判斷佇列q是否為空

elementtype deleteq(queue q): 將隊頭資料元素從佇列中刪除並返回

front做刪除操作 rear做插入操作   為空間的充分利用可以使用迴圈陣列

潛在問題: 無法判定佇列的狀態是空 還是滿

解決方案:1.使用額外標記 size 或tag域 2.僅使用n-1個陣列空間 

佇列的刪除圖例

《資料結構》二 線性結構

對於線性表,在順序儲存結構和鏈式儲存結構中查詢第k個元素,其時間複雜性分別是多少?正確答案 c你錯選為b 1.順序儲存結構 優點 1 隨機訪問 時間複雜度為o 1 2 無需為表示表中元素之間的邏輯關係而增加額外的儲存空間 缺點 1 插入 刪除操作需要移動大量元素,效率低 時間複雜度為o n 2 表的...

資料結構(二) 線性表

線性表是最簡單最常用的資料結構,是一種典型的線性儲存結構。定義 線性表是由n n 0 個資料元素 結點 a1 a 2 an 組成的有限序列。n為表的長度。當n 0,為 空表 n 0時,為 a1,a 2,an 邏輯特徵 非空的線性表只有乙個頭結點,也只有乙個終結點,頭結點只有乙個直接後繼結點,而沒有直...

資料結構實驗二 線性表

一 實驗目的 鞏固線性表的資料結構,學會線性表的應用。1.回顧線性表的邏輯結構,線性表的物理儲存結構和常見操作。2.學習運用線性表的知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗內容 1.建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果...