考研筆記 資料結構之鍊錶

2021-09-25 23:48:21 字數 3624 閱讀 8849

線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素。(這組儲存單元可以是連續的,也可以是不連續的)

線性表的鏈式儲存是一種非隨機儲存結構,但是方便插入和刪除。

單鏈表的每個結點中只包含乙個指標域,指向下乙個結點。

typedef

struct slnode

node,

*linklist;

構造帶頭結點空鍊錶

//建立帶頭結點的單鏈表

void

init_list

(linklist &l)

增加元素

//在單鏈表第i個位置之前插入元素e

bool addelem

(linklist &l,

int i, elemtype e)

linklist temp =

(linklist)

malloc

(sizeof

(node));

temp->val = e;

temp->next = p->next;

p->next = temp;

return true;

}

刪除元素

//刪除第i個位置上的元素

bool deleelem

(linklist &l,

int i, elemtype &e)

e = p->next->val;

linklist s = p->next;

p->next = s->next;

free

(s);

return true;

}

查詢元素

//查詢第i個位置的元素

bool getelem

(linklist l,

int i, elemtype &e)if(

!p || j > i)

e = p->val;

return true;

}

特點:表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。從表中任一結點出發可以找到表中其他結點。

typedef

struct slnode

node,

*linklist;

儲存結構和單鏈表是一樣的,要注意的是,在迴圈單鏈表中不設立頭指標,而設立尾指標。這樣可以使某些操作簡化。

初始化

//建立帶頭結點的單鏈表

void

init_list

(linklist &l)

為了方便判斷是否為空,仍然為鍊錶設立頭結點。

新增元素

//在單鏈表第i個位置之前插入元素e

bool addelem

(linklist &l,

int i, elemtype e)

int index = i;

while

(i >1)

linklist temp =

(linklist)

malloc

(sizeof

(node));

temp->val = e;

temp->next = p->next;

p->next = temp;

if(index == length +1)

return true;

}

要注意的是:因為l是尾指標,在鍊錶尾部新增元素時,需要更新l所指向的位置。

刪除元素

//刪除第i個位置上的元素

bool deleelem

(linklist &l,

int i, elemtype &e)

int j = i;

while

(i >1)

e = p->next->val;

linklist s = p->next;

p->next = s->next;

if(j == length)

free

(s);

return true;

}

查詢元素

//查詢第i個位置的元素

bool getelem

(linklist l,

int i, elemtype &e)

while

(i) e = p->val;

return true;

}

在雙向鍊錶中有兩個指標域,其一指向直接後繼,另一指向直接前驅。

typedef

struct dlnode dlnode,

*dlinklist;

初始化

void

init_list

(dlinklist &l)

初始化煉表示意圖

增加元素

//在第i個位置前新增元素e

bool addelem

(dlinklist &l,

int i, elemtype e)

dlinklist s =

(dlinklist)

malloc

(sizeof

(dlnode));

if(!s)return false;

s->val = e;

dlinklist p = l;

while

(i >1)

s->next = p->next;

s->prior = p;

p->next->prior = s;

p->next = s;

return true;

}

刪除元素

//刪除第i個元素

bool deleelem

(dlinklist &l,

int i, elemtype &e)

dlinklist p = l;

while

(i >1)

dlinklist q = p->next;

q->next->prior = p;

p->next = q->next;

e = q->val;

free

(q);

return true;

}

查詢元素

//查詢第i個元素

void

getelem

(dlinklist l,

int i, elemtype &e)

dlinklist p = l;

while

(i) e = p->val;

}

以上便是三種形式鍊錶的基本**。完整**

考研筆記 資料結構之順序表

線性表定義 長度為n的有序元祖。當n 0時稱為空表。線性表的基本操作是插入和刪除。線性表的順序表示指的是用一組位址連續的儲存單元一次儲存線性表的資料元素。線性表的順序儲存結構是一種隨機訪問的儲存結構。線性表第i個資料元素ai的儲存位置是 loc ai loc a1 i 1 l l為每個元素需占用的儲...

演算法筆記 資料結構 鍊錶

鍊錶節點一般有兩部分組成,即資料域和指標域 struct node 一般說來,資料域放節點要儲存的資料,而指標域指向下乙個結點的位址,這樣就會產生從某個結點開始的 由指標連線的一條鏈式結構,即鍊錶。而以鍊錶是否存在頭結點,又可以把鍊錶分為帶頭結點的鍊錶和不帶頭結點的鍊錶。頭結點一般成為head,且其...

資料結構考研筆記 資料型別

資料型別 1 結構型 結構體是系統提供給程式設計師製作新的資料型別的一種機制。eg 製作乙個由不同型別的變數組成的陣列 typedef struct typea typea a 定義了乙個陣列,a.a a.b a.c分別對應於結構體變數a的第一第二第三個元素的值 typea a 3 定義了乙個二維陣...