資料結構 2 2 線性表的順序表實現

2021-10-06 15:38:05 字數 2194 閱讀 5257

線性表有兩種實現方式,順序表和煉表,順序表作為較簡單的實現方式,可以借用陣列來實現。順序表和煉表各有各自的優缺點,這是由其性質所決定的,在選擇時要根據題目要求,靈活進行選擇。

以c**為例,需要定義乙個結構體,結構體中包括乙個陣列、乙個變數代表線性表的最大長度,乙個變數代表線性表的當前已使用長度。這裡需要注意,陣列作為儲存線性表資料的載體,具有兩種分配方式。

王道資料結構上將分配分為動態和靜態,所謂靜態是指在定義時直接指定確定長度的陣列

int data[

100]

;

像這種形式就屬於靜態分配,一次性劃分好所有的位置,也是比較常用的一種,畢竟只要開的足夠大就不會出現溢位。動態是通過記憶體分配函式malloc來實現,在定義結構體時定義乙個動態分配陣列的指標,然後單獨寫乙個初始化的語句來為這塊記憶體開闢空間,那麼開闢的空間就可以根據題目的資料進行自由的分配。當溢位時,可以用malloc函式再分配乙個更大的記憶體空間,將原來空間的內容複製進去再向裡面新增。這裡補充一下malloc函式,malloc函式用於獲取記憶體上乙個連續空間,需要和free配合使用,如果獲取了長度為5的空間,函式會在計算機上順序找乙個連續的長度為5的空間來儲存資料,這裡很有趣的是,如果你在這個陣列中存第六個資料,有時是可以存進去的,這取決於分配給你這個陣列的連續空間的第六位置是不是空的,如果空是可以存入並讀出的。

l.data=

(int*)

malloc

(sizeof

(int

)*initsize)

;

但是個人感覺這樣區分感知不強,如果說動態分配僅僅是為了方便溢位的處理,那也完全可以不用malloc函式,動態分配溢位時開闢乙個新的空間,那按照靜態的方法也完全可以在溢位時開乙個兩倍長的陣列,把原來的資料放進去再存入,也是乙個道理。個人不太明白這樣分配意義何在,實在是徒增功耗。

線性表作為入門的資料結構,順序實現只有幾個簡單的操作:增和刪。

對線性表的增加,真的不需要什麼難度,唯一的乙個點就是位置的移動,將插入位置及其後面的元素全部後移乙個位置即可,簡而言之就是插隊。刪除也是乙個道理,把刪除位置後面的**全都前移乙個位置,可以看作原來在排隊的乙個人不想排就走了,那後面的人肯定要向前補上。

在一開始初始化線性表時,也可以直接使用增加函式而不用單獨寫初始化函式,直接從頭開始新增資料。增加時需要更新當前長度的變數,一旦長度等於了最大長度,就禁止增加,刪除也是乙個道理。增加時如果要插入的位置超過了現在的長度就禁止插入,刪除如果目標位置上沒有資料也禁止刪除。

上手擼**,很久沒敲資料結構了,手很生,可能會有錯,而且為了演示性加了很多文字提示,有些臃腫。

#include

using

namespace std;

int initsize=10;

struct list

;struct list l;

void

init()

bool

insert

(int tar,

int num)

for(

int i=l.length;i>=tar;i--

) l.data[i]

=l.data[i-1]

; l.data[tar]

=num;

l.length++

;return

true;}

bool

del(

int tar)

void

print()

void

delmode()

void

insmode()

intmain()

print()

;while

(choice!=0)

}free

(l.data)

;return0;

}

這種線性表的實現,好處時隨機取用,可以直接訪問線性表裡面有資料的任何乙個部分,而使用鍊錶就只能從頭一點一點移動到目的位置,缺點也很明顯,刪除和增加需要的時間很大,畢竟需要大量的移動資料,刪除和增加的時間複雜度都是o(n)。另外順序表實現儲存密度大,因為鍊錶實現時每個節點都需要乙個指向下乙個節點的指標,雙向鍊錶更是需要兩個,而順序表則不用,乙個結構體裡面直接用陣列存放,不需要這些花裡胡哨的東西。

資料結構2 2線性表的順序表示和實現

1 include2 include 3using namespace std 45 typedef int status 將status狀態設定為int 6 typedef int elemtype elemtype狀態設定為int78 define list init size 100 線性表儲...

資料結構 線性表 順序表

豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...

資料結構 線性表 順序表

線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...