資料結構 鍊錶

2021-10-01 10:30:47 字數 1835 閱讀 1296

1、定義:n個節點離散分配,彼此通過指標相連,每個節點只有乙個前驅節點和乙個後驅節點,首節點沒有前驅結點,尾節點沒有後驅節點。

專業術語:

首節點:第乙個有效(有資料)的節點

尾節點:最後乙個有效的節點

頭節點:第一有效節點之前的節點,頭節點並不存放有效資料。其指標指向首節點。增加乙個頭節點可以方便對鍊錶進行操作。頭節點的資料型別和首節點一樣。

頭指標:指向頭節點的指標變數。(其存放頭節點的位置)

尾指標:指向尾節點的指標變數。

確定乙個鍊錶需要幾個引數:只需要頭指標。因為通過頭指標可以推算出鍊錶的其他所有資訊。

乙個節點的生成:

struct node

;

2、分類:

雙鏈表:每乙個節點有兩個指標域

單鏈表:

迴圈鍊錶:能通過任何乙個節點,找到其他所有節點。

非迴圈鍊錶

3、非迴圈單鏈表演算法(一定要把鍊錶的結構想出來進行操作)

首先定義乙個節點:

class node

;node *p;

node *r;

p->next=r;//p的後乙個節點是r

(1)插入乙個節點(在節點p的後面插入乙個節點q)

node* q;

node* tmp;

tmp=p->next;

p->next=q;

q->next=tmp;

//或者可以這樣插入:

q->next=p->next;

p->next=q;

(2)刪除

//刪除乙個節點(把p後面的節點刪除)

//p->next=p->next->next;(這樣寫會導致記憶體洩漏,刪除的節點記憶體未釋放)

node* tmp2;

tmp=p->next;

p->next=p->next->next;

free(tmp);

`(3)定義乙個頭節點

`//定義乙個頭節點

node* head;

head->next=p;//p就是首節點

(4)建立乙個鍊錶

//建立乙個鍊錶

node* creat_list()

return head;

}(5)遍歷乙個鍊錶

//遍歷乙個鍊錶

void show_list(node* head)

} (6)判斷鍊錶是否為空

bool empty(node* head)

(7)計算鍊錶的長度

int length(node* head)

return count;

} (8)鍊錶排序,演算法給陣列的一樣

void sort_list(node* head) }}

} //不用返回值,出入的是指標。

(9)在乙個鍊錶中插入乙個節點

void insert_list(node* head,int x,int y)

if(i>x-1||tmp->next==null)

cout<<"插入失敗"tmp->next=np;

np->next=q;

} (10)在乙個鍊錶中刪除乙個節點

int del_list(node* head,int x)

if(tmp->next==null || i>x-1)

cout<<"刪除失敗"y=q->data;

tmp->next=tmp->next->next;

free(q);

q=null;

return y;

}

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...

資料結構 鍊錶

鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...

資料結構 鍊錶

一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...