線性表及其表現
第二章的內容是關於三種最基本的資料結構 結合《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個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果...