線性表
線性表的定義:零個或多個資料元素的有限序列
若線性表記為(a1,……ai-1,ai,……,an),則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i = 1,2,3,……n-1時,ai有且僅有乙個直接後繼,當i = 2,3,……n,ai有且僅有乙個直接前驅。
在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。
線性表的抽象資料型別
兩個線性表集合a b的並集操作
(迴圈b中的每個元素,判斷當前元素是否存在a中,若不存在,則插入到a中即可)
線性表的順序儲存結構(一維陣列實現)
順序結構的結構**
順序結構的三個屬性:
1. 儲存空間的起始位置:陣列data,他的儲存位置就是儲存空間的儲存位置
2. 線性表的最大儲存容量:陣列長度maxsize
3. 線性表的當前長度:length
陣列長度和線性表長度的區別
陣列的長度是存放線性表的儲存空間的長度,儲存分配後一般不變。線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。
在任意時刻,線性表的長度應小於等於陣列的長度。
位址計算方法
儲存器中的每個儲存單元都有自己的編號,這個編號稱為位址。
假設某資料元素,假設占用的資料元素的儲存位置滿足下列關係(loc表示獲得儲存位置的函式)
loc(ai+1) = loc(ai) + c;
#define ok 1
#define error 0
#define true 1
#define flase 0
typedef int status;
//status 是函式的型別,其值是函式結果狀態**,如ok等
//初始條件:順序線性表l已存在,1<
1. 獲得元素操作
2. 插入操作
插入演算法的思路:
a) 如果插入位置不合理,丟擲異常。
b) 如果線性表長度大於陣列長度,則丟擲異常或動態增加容量。
c) 從最後乙個元素開始向前遍歷到第i個位置,分別將她們都向後移動乙個位置。
d) 將要插入元素填入位置i處。
e) 表長加1.
刪除操作
a) 刪除演算法的思路
b) 如果刪除位置不合理,丟擲異常
c) 取出刪除元素
d) 從刪除元素位置開始便利到最後乙個元素位置,分別將他們都向前移動乙個位置。
e) 表長減1
線性表順序儲存結構的優缺點
優點:l 無需為表示表中元素之間的邏輯關係而增加額外的儲存空間
l 可以快速的訪問表中任一位置的元素
缺點:l 插入和刪除需要移動大量元素
l 當線性表長度變化較大時,難以確定儲存空間的容量
l 造成儲存空間的碎片
學習筆記 資料結構與演算法(六) 線性表(4)
據說著名猶太歷史學家josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有...
資料結構(六) 線性表之迴圈鍊錶與雙向鍊錶
我們之前說過了單鏈表,大家應該都有印象吧,那麼迴圈鍊錶是什麼呢?迴圈鍊錶就是將單鏈表中終端結點的指標端自空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶 circular linked list 那麼迴圈鍊錶出現的目的是為什麼呢?迴圈鍊錶解決如何從當中...
資料結構 線性表(一)
我們在學習c語言的時候都用過陣列,再學深一點大概會學到結構體,鍊錶之類的。正常情況下,對於這一類的資料結構,我們都能看到他們的共同點。每乙個資料項之間都只跟另乙個資料項鏈結,所以我們把這一類的資料結構叫做線性表。不考慮實際記憶體位址的分配,從邏輯意義上看,我們可以把資料項都連起來,形成乙個像表一樣的...