資料結構和演算法 8 線性表 線性表的順序儲存結構

2021-09-01 21:53:07 字數 2924 閱讀 6257

線性表有兩種物理儲存結構:

順序儲存結構鏈式儲存結構。

物理上的儲存方式事實上就是在記憶體中找個初始位址,然後通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素依次放在這塊空地中。

a1

a2

a3

a4

ai-1

ai

ai+1

an

下面來個小甲魚的栗子:

背景:小甲魚帶著咱的魚c旅遊團去看電影,看那個叫3d***有木有?!哎喲,去到電影院人山人海,但妹子的身影還是難以逃過小甲魚的火眼精金,所以小甲魚猛地帶領眾魚油一把奪下了妹子旁邊的一排位置。。。。。。

建立線性表:小甲魚拿下第乙個位置後,魚油們果斷依次坐下,這樣子我們就建立了乙個線性表;

特性:例如黑夜喜歡亂吃零食,所以他又拉肚子了。。。但是黑夜買票了,所以他的位置就算空著,也沒有人會坐上去。這就是順序儲存結構的特性之一

線性表的順序儲存結構的**:

#define maxsize 20    

typedef int elemtype;#定義乙個型別

typedef struct

sqlist

這裡我們封裝了乙個結構,事實上就是對陣列進行了封裝,增加了乙個當前長度的變數罷了;

總結:線性儲存結構封裝需要的三個屬性

(1)線性空間的起始位置,資料data,它的儲存位置就是線性表儲存空間的儲存位置。

(2)線性表的最大儲存容量:陣列的長度maxsize。

(3)線性表的當前長度:length。

注意:陣列長度與線性表的當前當度需要區分一下:陣列的長度就是存放線性表的儲存空間總長度,一般初始化後不發生變化;而線性表的當前長度是線性表中元素的個數,是會變化的;

假設elemtype占用的是c個儲存單元(位元組),那麼線性表中第i+1個資料元素和第i個資料元素的儲存位置的關係是(loc表示獲得儲存位置的函式):

loc(ai+1) = loc(ai) + c

所以對於第i個資料元素ai的儲存位置可以由a1推算得出:

loc(ai) = loc(a1) + (i-1)*c

結合下圖

元素

a1

a2

ai-1

ai

an

空閒空間下標

0 1

… i-2

i-1 …

n-1

通過這個公式,我們可以隨時計算出線性表中任意位置的位址,不管它是第乙個還是最後乙個,都是相同的時間。那麼它的儲存時間效能當然就為o(1),我們通常稱為隨機儲存結構;

實現getelem:將線性表l中的第i個位置的元素值返回。

分析:就程式而言,我麼你只需要把陣列的第i-1下標的值返回即可。

**實現:

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

// status 是函式的型別,其值是函式結果狀態**,如ok等。

// 初始條件:順序線性表l已存在,1 <= i <= listlength(l)

// 操作結果:用e返回l中第i個資料元素的值。

status getelem(sqlist l, int i, elemtype *e)

*e = l.data[i-1];

return ok;

}

注意:

(1)根據定義,返回值型別status是乙個整型;

(2)約定返回1代表ok,返回0代表error。今後還會出現,也是使用同樣的約定

插入操作

插入演算法的思路:

(1)如果插入的位置不合理,丟擲異常;

(2)如果線性表長度大於等於陣列長度,則丟擲異常或動態增加陣列容量;

(3)從最後乙個元素開始向前遍歷到第i個位置,分別將它們都向後移動乙個位置;

(4)將要撤入的元素填入位置i處;

(5)線性表的長度增加1;

**實現:

/* 初始條件:順序線性表l已存在,1<=i<=listlength(l)。 */

/* 操作結果:在l中第i個位置之前插入新的資料元素e,l長度+1。*/

status listinsert(sqlist *l, int i, elemtype e)

if( i<1 || i>l->length+1) // 當i不在範圍內時

if( i <= l->length ) // 若插入資料位置不在表尾

}l->data[i-1] = e; // 將新元素插入

l->length++;//線性表長度+1

return ok;

}

★finished by songpl ,2018.11.2

mysql 線性表 資料結構之線性表

概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...

資料結構 線性表演算法

1.線性表 線性表是n個具有相同特性的資料元素的有限序列。線性表的主要儲存結構 順序儲存結構 順序表 鏈式儲存結構 鍊錶 2.順序儲存 儲存空間連續,用一組連續的儲存單元依次存放資料元素 即邏輯上相鄰的元素,其物理位置也相鄰。優點 隨機訪問 缺點 插入刪除結點困難 擴充套件不靈活 3.鏈式儲存 儲存...

mysql 線性表 資料結構 線性表之順序線性表

public class sequencelist else stringbuilder sb new stringbuilder for int i 0 i size i int len sb.length public class sequencelisttest public static v...