資料結構和演算法之線性表(C )

2021-10-06 08:27:33 字數 2933 閱讀 5847

線性表的順序儲存結構的特點是,用物理上的鄰接關係表達邏輯上的前驅和後繼,因此可以通過簡單的公式獲取表中的任意元素的位址,但是在插入和刪除過程中需要移動大量元素,同時對儲存空間的利用不是很合理。接下來我用c++的模板式程式設計來實現線性表的基本功能

template

<

typename t>

class

linearlist

;virtual

bool

isempty()

const

;virtual

bool

find

(int k, t &b)

const=0

;virtual

bool

delete

(int k, t &b)=0

;virtual

bool

insert

(int k,

const t&b)=0

;virtual

void

output

(ostream &out)

const=0

;virtual

~linearlist()

;private

:int length;

};

這裡利用了抽象函式來實現線性表和鍊錶的一些基本功能,其中判斷是否為空不是抽象類,因為判斷是否為空的實現方式比較類似,通過多型可以實現。其他的為純虛函式,便於接下來對線性表的表達。

template

<

typename t>

class

linearlistsqu

:public linearlist};

virtual

bool

isempty()

const

;virtual

intlength()

const

;virtual

bool

find

(int k, t &b)

const

;virtual

bool

delete

(int k, t &b)

;virtual

bool

insert

(int k,

const t&b)

;virtual

void

output

(ostream &out)

const

;protected

:int maxsize;

t *element;

int length;

};

這裡是抽象類的繼承,通過使用指標陣列的方式來建立乙個線性表,同時在結尾需要對指標的釋放,防止記憶體洩露,其中的思路比較簡單,最後還用到了輸出運算子過載(《的過載),使其可以輸出物件的元素,簡化了後續的步驟。

class

nomem;~

nomem()

;private:}

;class

outofbound;~

outofbound()

;private:}

;

這裡是檢查函式是否出現異常進行異常處理,採用了防禦式程式設計的思想

template

<

typename t>

linearlistsqu

::linearlistsqu

(int maxlistsize)

catch(.

..) length =0;

}template

<

typename t>

bool linearlistsqu

::find

(int k, t &b)

const

else

}template

<

typename t>

void linearlistsqu

::output

(ostream &out)

const

}template

<

typename t>

ostream &

operator

<<

(ostream &out,linearlistsqu

& b)

template

<

typename t>

bool linearlistsqu

::insert

(int k,

const t &b)

if(length == maxsize)

for(

int i = length-

1; i >=k; i--

)//第幾個數字減一得到指標的序數,例如 1,2,3,4,5,6 轉化為指標位址為0,1,2,3,4,5

//最後乙個數字減一後從k算起

element[k]

= b;

//在移出來的空位補乙個元素

length++

;//長度加一

return

true;}

template

<

typename t>

bool linearlistsqu

::delete

(int k, t &b);}

else

throw

outofbound()

;}

這裡便是對線性表功能的基本實現,具體思路很清晰,大家理解應該沒什麼問題

最後便是主函式的實現,用於測試該線性表的正確性。

int

main()

catch(.

..)}

資料結構和演算法之線性表

因為要準備筆試,要涉及到一些資料結構和演算法基礎。所以準備重新學習和整理下資料結構演算法的的知識。按照但不全按照下圖的思維導圖展開。定義 元素一條線布局,可以不同,有先後順序。除了第乙個沒有直接前驅,最後乙個沒有直接後繼。其他節點都有直接前驅和後繼。下儲存可分順序儲存和鏈式儲存。定義 元素放在一塊連...

資料結構之線性表(C)

1 預定義狀態碼 define true1 define false0 defineok1 define error0 define infeasible 1 define overflow 2 2 預定義常量 define list init size 100 線性表容量 define listi...

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

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