線性表 鏈式表示形式

2021-10-19 17:58:51 字數 3282 閱讀 2760

好久沒熬夜了(兩天嘿嘿嘿)

好久沒摸鍵盤了(乙個星期左右吧)

藉著興奮勁,來寫寫部落格,記錄學習的瞬間

剛剛查了一些其他的資料和文章,發現很多都是直接搬過來的,而且還有好多搬錯了…

先來看看線性表的定義:

乙個線性表是n個資料元素的有限序列,可以表示成:

(2,3,6,8,9)

在稍複雜的線性表中,乙個資料元素可以由若干個資料項組成,在這種情況下,常把資料元素稱為記錄,含有大量記錄的線性表又稱檔案(吧啦吧啦好多)

直接開門見山:線性表的鏈式表示和實現

導言:線性表的鏈式儲存結構是用一組任意的儲存單元儲存線性表的資料元素(這組儲存單元可以是連續的,也可以是不連續的)。因此,為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,對資料元素來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊。這兩部分資訊組成資料元素的儲存映像,稱為結點(node),他包括資料域和指標域

typedef

struct lnode lnode,

*linklist;

假設l是linklist型的變數,則l是單鏈表的頭指標,他指向表中第乙個結點。若l為空(null),則所表示的線性表為空表,其長度為0。有時,我們在單鏈表的第乙個結點之前附設乙個結點,稱之為頭結點,頭結點的資料域可以不儲存任何資訊,也可儲存線性表的長度等類的附加資訊,頭結點的指標域儲存指向第乙個結點的指標。

這個分不帶頭結點和帶頭結點

bool

initlist1

(linklist& l)

bool

initlist2

(linklist& l)

intmain

(void

)

用插入操作來區分一下他們:

// 帶頭結點

bool

listinsert

(linklist& l,

int i, elemtype e)

// 不帶頭結點

bool

listinsert

(linklist& l,

int i, elemtype e)

lnode* p;

int j =0;

p = l;

while

(p !=

null

&& j < i -1)

p = p-

>next;

j++;if

(p ==

null

)return

false

; lnode* s =

newlnode()

; s-

>data = e;

s->next = p-

>next;

p->next = s;

return

true

;}

下面的操作都是以有頭結點來操作的

查詢乙個資料是否在單鏈表中

void

search_list

(linklist& l,

int n,

bool

& judge)

else

}return-1

;}

插入乙個元素到鍊錶某個位置

void

insertlist

(linklist& l,

int n,

int m,

bool

& judge)

else

}return-1

;}

刪除某個結點(同上,不講了(傲嬌!))

有時,也可以借用一維陣列來描述線性鍊錶,就是靜態鍊錶

陣列的乙個分量表示乙個結點,同時用游標(指示器cur)代替指標指示結點在陣列中的相對位置(也就是下乙個結點的位置)

優點:在插入和刪除的時候無需移動元素,僅需修改游標

缺點:要事先分配乙個較大的空間,不可更改

#define maxsize 100

typedef

struct

component, slinklist[maxsize]

;

查詢乙個在靜態鍊錶的元素

int

locatelist

(slinklist s, elemtype e)

return i;

}

插入乙個元素,同時也附上其他操作

// 初始化備用空間

void

initspace

(slinklist& s)

space[maxsize-1]

.cur =0;

}// 生成s的頭結點

intmalloc_sl

(slinklist& s)

return i;

}// 將空閒結點鏈結到備用鍊錶上

void

free_sl

(slinklist& s,

int k)

status listinsert

(staticlinklist space,

int i, elemtype e)

//插入元素

else

return error;

}

迴圈鍊錶:circular linked list,他的特點是表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環,由此,從表中任意節點結點出發均可找到表中其他結點。

當有頭指標的時候,尾指標指向的是頭指標;沒有頭指標的時候,尾指標指向的是第乙個結點。

雙向鍊錶:上述鍊錶的特點是找其他結點只能從前往後出發,若要尋找結點的直接前趨,則需要從表頭指標出發。雙向鍊錶的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅

typedef

struct dulnode dulnode,

*dulinklist;

下面以插入操作為例

bool

listinsert_dul

(dulinklist& l,

int i, elemtype e)

線性表鏈式表示詳解

線性表的鏈式表示 鍊錶資料結構 相對於線性表的順序儲存,線性表的鏈式儲存結構,邏輯上相鄰的元素在物理位置上不相鄰,便於進行插入和刪除操作,但同時也失去了順序表可以隨機訪問的優點。線性表的鏈式表示分為三種 單鏈表,迴圈鍊錶和雙向鍊錶 1 單鏈表 元素的儲存單元可以是連續的,也可以不是連續的 每乙個結點...

線性表鏈式表示和實現

1 我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼的域稱為指標域。指標域中儲存的資訊稱為指標或鏈。元素 資料元素映像 指標 指示後繼元素儲存位置 結點 表示資料元素 2 n個結點 ai 1 i n 鏈成乙個鍊錶,即為線性表。3 鍊錶中第乙個結點的儲存位置叫做頭指標。4 線性表最後乙個指標為空 ...

線性表鏈式儲存

線性表鏈式儲存結構的建立 刪除最小值結點 值唯一 刪除某個指定值 不唯一 就地逆置 反向輸出 遞增排序 刪除重複結點 根據奇偶序號劃分成兩個帶頭結點的單鏈表。include stdio.h include stdlib.h typedef struct lnode lnode,llist void ...