資料結構之線性表 一

2021-08-19 06:09:55 字數 1098 閱讀 5427

因為準備考研的原因,想對資料結構進行深入學習,準備寫部落格來記錄學習的知識。如有問題的地方望各位大佬指出。

首先定義:線性表是具有相同特性資料元素的乙個有限序列。

線性表的儲存結構有順序儲存結構和鏈式儲存結構兩種。第一種稱為順序表,第二種稱為鍊錶。(對於兩種結構的記憶,順序表跟陣列類似,而鍊錶像生活中的火車。)

關於儲存結構的比較

1.順序表要求占用連續的儲存空間;

2.而鍊錶支援儲存空間的動態分配,同時也支援申請一片連續的儲存空間;(剛開始接觸產生了鍊錶只能動態分配儲存空間的錯覺)

3.靜態鍊錶用陣列來表示,需要一片較大的連續空間。

關於順序表與鍊錶結構的優缺點:

1.順序表可以直接訪問表中的元素,而鍊錶則需要通過結點的遍歷來訪問到位置元素。

2.順序表的新增與刪除元素時間複雜度較高,而鍊錶的則較低。

解釋:因為順序表除了新增或者刪除最後乙個元素,都需要通過移動元素來覆蓋刪除的元素,新增元素時需要移動元素將插入的位置空出來。鍊錶是通過改變指標來新增和刪除元素的,所需要的只是找到要進行操作的位置。

下面記錄一下線性表的基本操作部分**和操作思路。

首先是順序表

typedef struct arrayarray;
順序表的結構體定義如上所示,*data表示表的資料域,size表示表的大小,該大小為init時申明的,length表示表當前長度。

init操作對於指標進行記憶體申請,size初始化為給定的大小,length初始化為0。

插入操作首先判斷插入位置是否合法,非法返回0;如果合法,判斷順序表的長度是否已經到了最大,如果到了,將順序表擴容,之後將插入位置後面的所有元素往後移動乙個位置,在將位置設定為插入的值,插入後長度加一。

刪除操作首先也是判斷位置是否合法,移動元素覆蓋目標位置的元素,要注意的是應從刪除位置的右邊第乙個元素開始移動而非順序表的最後乙個元素。

列印表操作即為遍歷完整個表,乙個乙個輸出就可以了。

如果編寫整個程式還要在主函式的最後對順序表進行記憶體釋放。

free(array->data);

free(array);

首先要對順序表的指標域進行釋放,之後再釋放順序表。

資料結構之線性表(一)

線性表的順序儲存結構 1.標頭檔案sqlist.h define true 1 define false 0 define ok 1 define error 0 define elemtype int define list init size 10 define list increment 1...

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

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

資料結構之線性表

從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...