線性表基礎

2021-10-06 11:41:23 字數 3313 閱讀 9160

一元多項式的表示:由於每個非零項由設計兩個資訊:係數和指數

1.用結構體陣列表示

2.鍊錶儲存(每個節點中存放係數和指數)

定義:由同型別資料元素構成有序序列的線性結構

1.表中元素個數為線性表的長度

2.線性表沒有元素時為空表

3.表起始位置為表頭,表結束位置為表尾

線性表的順序儲存又稱為順序表。它是用一組位址連續的儲存單元,依次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。因此,順序表的特點是表中元素的邏輯順序與其物理順序相同。

注意:線性表中的元素的位序是從1開始的,而陣列中元素的下標是從0開始的。

假設線性表的元素型別為elemtype,線性表的順序儲存型別描述為:

#include

#include

#define maxsize 100

typedef

int elemtype;

typedef

struct sqlist sqlist;

主要操作:

1.初始化(建立空的順序表)

2.查詢(o(n))

3.插入(o(n))

4.刪除(o(n))

不要求邏輯上相鄰的兩個元素物理上也相鄰,插入刪除不需要移動資料元素,只需要修改鏈。

單鏈表結點型別:

struct node 

;

1.採用尾插法建立鍊錶(輸入陣列作為鍊錶結點值):

#include

#include

struct node

;node*

create

(int array)

last-

>next =

null

;return head;

}int

main()

; node *p =

create

(a);

p = p-

>next;

//從頭結點後第乙個結點開始

while

(p !=

null

)return0;

}

頭插法:該方法從乙個空表開始,生成新結點,並將讀取到的資料存放到新節點的資料域中,然後將新結點插入到當前鍊錶的表頭,即頭結點之後。

node*

create

(int array)

return head;

}

2.查詢(o(n))

3.插入

}4.刪除

1)按照位置刪除

//釋放結點的儲存空間f

delete

(q);

}2)刪除所有給定值的結點

void

delete

(node *head,

int x)

else

}}

3)刪除給定值的第乙個結點

void

delete

(node *head,

int x)

if(q-

>data!=x)

else

}

鍊錶中除了單鏈表還有迴圈鍊錶,雙鏈表(每個節點有兩個指標指向前和後)

和靜態鍊錶

靜態鍊錶是借助結構體陣列來描述線性表的鏈式儲存結構,結點也有資料域data和指標域next,與前面所講的鍊錶中的指標不同的是,這裡的指標是結點的相對位址(陣列下標),又稱為游標。和順序表一樣,靜態鍊錶也要預先分配一塊連續的記憶體空間。

靜態鍊錶節點定義:

struct node

;

1.儲存分配方式:

順序儲存結構用一段連續的儲存單元依次儲存線性表的資料元素。

單鏈表採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素。

2.時間效能:

查詢:順序儲存結構o(1)

單鏈表o(n)

插入和刪除:

順序儲存結構需要平均移動表長一半的元素,時間為o(n)

單鏈表在計算出某位置的指標後,插入和刪除時間僅為o(1)

3.空間效能:

順序儲存結構需要預分配儲存空間,分大了,容易造成空間浪費,分小了,容易發生溢位。

單鏈表不需要分配儲存空間,只要有就可以分配,元素個數也不受限制。

結論:若線性表需要頻繁查詢,很少進行插入和刪除操作時,宜採用順序儲存結構。

若需要頻繁插入和刪除時,宜採用單鏈表結構。

比如說遊戲開發中,對於使用者註冊的個人資訊,除了註冊時插入資料外,絕大多數情況都是讀取,所以應該考慮用順序儲存結構。

而遊戲中的玩家的**或者裝備列表,隨著玩家的遊戲過程中,可能會隨時增加或刪除,此時再用順序儲存就不太合適了,單鏈表結構就可以大展拳腳了。

當線性表中的元素個數變化較大或者根本不知道有多大時,最好用單鏈表結構,這樣可以不需要考慮儲存空間的大小問題。

而如果事先知道線性表的大致長度,比如一年12個月,一周就是星期一至星期日共七天,這種用順序儲存結構效率會高很多。

總之,線性表的順序儲存結構和單鏈表結構各有其優缺點,不能簡單的說哪個好,哪個不好,需要根據實際情況,來綜合平衡採用哪種資料結構更能滿足和達到需求和效能。

線性表基礎(二)

單鏈表 通過指標把它的一串儲存結點鏈結成乙個鏈 儲存結點由兩部分組成 data欄位 link欄位 template struct node 單鏈表的實現 template class linklist linklist t a int n linklist int length t get int ...

線性表基礎(三)

迴圈鍊錶 特點 首尾相接的鍊錶。可以從任一節點出發,訪問鍊錶中的所有節點。判斷迴圈鍊錶中尾結點的特點 q next first template struct node template class cyclelinklist 空表的構造 template cyclelinklist cycleli...

02 線性表基礎考點

線性表 一 線性表的順序儲存 1 線性表採用順序儲存,必須占用一片連續的儲存單元 2 線性表順序儲存結構是一種隨機訪問的儲存結構 3 順序表在查詢指定序號的元素 讀取元素和在末尾插入元素最節省時間 4 順序表中,在任何乙個位置插入元素的概率相同,則插入乙個元素所需移動的元素平均數 n 1 2 5 順...