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...