資料結構 線性表

2021-06-06 11:01:52 字數 1455 閱讀 9594

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。

按其邏輯儲存方式的不同可分為兩類線性表:順序表和鏈式表。其中鏈式表又可分為線性鍊錶、迴圈鍊錶和雙向鍊錶。

下面分別介紹下這幾種線性表的資料結構:

1. 順序表

typedef struct sqlist;

插入演算法:i到n位整體後移,再將新資料插入到位置i。

超出容量時可用realloc擴充套件sqlist容量,realloc函式介紹: 原型

:extern void *realloc(void *mem_address, unsigned int newsize); 功能

:先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域,同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。

返回值:如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

刪除演算法:要刪除第q位的數,從q+1到n順序前移。

2. 線性鍊錶和靜態鍊錶

typedef struct lnodelnode, *linklist;
插入演算法:通過頭指標遍歷找到待插入的位置i的節點,修改i、i-1和待插入節點的next指標。

同順序表比較,線性鍊錶少了整體後移的操作,而多了遍歷節點的操作。

綜合線性鍊錶和順序鍊錶的優點而構建出的就是靜態鍊錶,但它是以占用靜態記憶體為代價的,其定義如下:

#define maxsize 1000

typedef struct snode, slinklist[maxsize];

靜態鍊錶通過陣列來儲存資料,通過next指示下乙個資料在陣列中的位置。

3. 雙向鍊錶

typedef struct dulnodedulnode, *dulinklist;
其結構中多了乙個指向前乙個節點的指標,所以可以雙向遍歷查詢節點。

4. 迴圈鍊錶

表中的最後乙個節點的指標域指向頭結點,整個鍊錶形成乙個環。

5. 線性表的應用——多項式相加

p(x)=a0+a1x+a2x^2+...+anx^n

首先構建包含係數和指數的資料元素:

typedef struct elemtype;
乙個elemtype可以表示多項式的一項,再用此元素構造按指數遞增的線性表表示整個多項式。

若用順序表或靜態鍊錶表示多項式,需連續構造,指數跳躍很大的多項式會浪費很多位址空間;故用有序鍊錶來表示比較合適:

typedef linklist polynomial;
兩個多項式進行加法操作時,依次取出每個節點的expn元素作比較後再做相應操作,具體操作較簡單,這裡不再贅訴。

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

include using namespace std define listsize 100 表空間的大小可根據實際需要而定,這裡假設為100 typedef int datatype datatype的型別可根據實際情況而定,這裡假設為int typedef struct seqlist 初始化...