線性表的順序儲存結構的特點是,用物理上的鄰接關係表達邏輯上的前驅和後繼,因此可以通過簡單的公式獲取表中的任意元素的位址,但是在插入和刪除過程中需要移動大量元素,同時對儲存空間的利用不是很合理。接下來我用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 的直接後繼元...