資料結構學過了模板之後就開始了線性表的學習,線性表又分為簡單的順序儲存和鏈式儲存兩種方式。兩種方法各有長短,根據不同的實際情況定義使用。
是零個或多個具有相同型別的資料元素的有限序列。
通常的線性表中有兩個元素,乙個是儲存的資料,另乙個是表資料的長度。
線性表的順序儲存,是指用一維位址連續的儲存單元依次儲存線性表中的各個元素。
設順序表的每個元素占用c個儲存單元,則第i個元素的儲存位址為:
線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素物理儲存的相鄰關係來反映資料元素之間邏輯上的相鄰關係。
一維陣列儲存順序表中的資料。
#include
using namespace std;
const
int maxsize =
100;
template
class seqlist
// 析構函式為空
intlength()
// 求線性表的長度
t get
(int i)
;// 按位查詢,取線性表的第 i 個元素
intlocate
(t x)
;// 按值查詢,求線性表中值為 x 的元素序號
void
insert
(int i, t x)
; t delete
(int i)
;// 刪除線性表的第 i 個元素
void
printlist()
;// 遍歷線性表,按序號依次輸出各元素 };
intmain()
兩個建構函式:
seqlist()
//定義無參的建構函式,需要使length長度為0
template
//模板
seqlist::
seqlist
(t a,
int n)
為了保證資料的完整,順序表利用迴圈將第 i 個位置的數值替換掉,迴圈只可從資料尾部開始,data[i]=data[i-1]。
線性表的插入運算是指在表的第i (1≤i≤n+1)個位置,插入乙個新元素e,使長度為n的線性表 (e1,…,ei-1,ei,…,en) 變成長度為n+1的線性表(e1,…, ei-1,e,ei,…,en)
template
void seqlist::
insert
(int i, t x)
時間複雜度不多做證明,單重迴圈,時間複雜度為o(n)
同樣,刪除操作為了保證資料不丟失,只可以在第 i 個位置開始迴圈,向後替換資料。
線性表的刪除運算是指將表的第i(1≤i≤n)個元素刪去,使長度為n的線性表(e1,…, ei-1,ei,ei+1,…,en)變成長度為n-1的線性表(e1,…, ei-1, ei+1,…,en)。
template
t seqlist::
delete
(int i)
時間複雜度為o(n)
按位置查詢
template
t seqlist::
get(
int i)
按值查詢
template
int seqlist::
locate
(t x)
時間複雜度o(n)
由上面的討論可知, 線性表順序表示的優點是: (1) 無需為表示結點間的邏輯關係而增加額外的儲存空間(因為邏輯上相鄰的元素其儲存的物理位置也是相鄰的);
(2) 可方便地隨機訪問表中的任一元素。
由上面的討論可知, 線性表順序表示的缺點: (1) 插入或刪除運算不方便, 除表尾的位置外,在表的其它位置上進行插入或刪除操作都必須移動大量的結點,其效率較低;. (2) 由於順序表要求占用連續的儲存空間,儲存分配只能預先進行靜態分配,因此當表長變化較大時,
難以確定合適的儲存規模。
所以在順序儲存之外,我們可以引入鏈式儲存結構並且實現,鏈式儲存會彌補順序儲存的不足,解決了順序儲存的諸多問題,但其本身也因為較為複雜有一定的侷限性,需要好好學習,熟練使用。
資料結構 簡單的順序表結構
編寫乙個程式exp2 1.cpp,實現順序表的各種運算 假設順序表的元素型別為char 並在此基礎上完成如下功能 1 初始化順序表l 2 採用尾插法依次插入元素a,b,c,d,e 3 輸出順序表l 4 輸出順序表l的長度 5 判斷順序表l是否為空 6 輸出順序表l的第3個元素 7 輸出元素a的位置 ...
C 資料結構 順序表
迴圈後面加 是個好行為,不然很容易犯低階錯誤 導致乙個變數的位置放錯了,看了很久沒看出bug 順序表 include includeusing namespace std const int maxsize 25 typedef struct seqlist int main cout endl r...
C 資料結構 順序表
順序表,顧名思義儲存在計算機指定記憶體區域的一塊連續的儲存結構,跟我們一起排隊做廣播體操的那種方式 儲存物理結構 物理記憶體空間上是連續的 儲存邏輯關係 儲存值之間的關係為一對一 使用場景 一般訪問資料量比較大,新增和刪除操作不頻繁的資料 那麼我們這裡實現的語言是用的c 對於線性表的一些特性我們這裡...