單鏈表的建立與使用

2021-10-24 22:09:24 字數 4389 閱讀 9985

#include

#include

#include

#include

using

namespace std;

typedef

int elementtype;

// 資料的型別應由使用者決定

typedef

struct node

node;

typedef

struct node *linklist;

宣告乙個指標p用於不斷生成新結點

初始化乙個空鍊錶l

讓l的頭結點的指標指向null,即建立乙個帶頭結點的單鏈表

迴圈:

/*隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(頭插法,棧)*/

void

createlisthead

(linklist *l,

int n)

}

/*隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(尾插法,佇列)*/

void

createlisttail

(linklist *l,

int n)

tail-

>next =

null

;// 迴圈結束後,將當前結點的指標域置空,表示當前鍊錶結束

}

宣告一結點p和q

將第乙個結點賦值給p

迴圈:

/*單鏈表的整表刪除*/

bool

clearlist

(linklist *l)

(*l)

->next =

null

;return

true

;}

說明:q指標的必要性。p是乙個結點,有資料域和指標域,當直接將p指標free掉而不將p的指標域保留下來的時候,其指標域將會被一起free,q的作用就是用來記錄儲存下一結點的。

宣告乙個指標p指向鍊錶的第乙個結點,初始化j從1開始

當j若到鍊錶末尾時p為空,則說明第i個結點不存在

否則說明查詢成功,返回結點p的資料

/*返回l中第i個元素的值*/

elementtype getelem

(linklist *l,

int i)if(

!p || j > i)

// 第i個結點不存在

return0;

e = p-

>data;

return e;

}

宣告乙個指標p指向煉表頭結點,初始化j從1開始

當j若到鍊錶末尾p為空,則說明第i個結點不存在

否則說明查詢成功,在系統中生成乙個空結點s

將資料元素e賦值給s->data

單鏈表的插入標準語句:s->next = p->next;p->next = s;

注意:上述語句順序不能調轉

/*在l中第i個結點位置之前插入新的資料元素e,l的長度加1*/

bool

listinsert

(linklist *l,

int i, elementtype e)if(

!p || j > i)

return

false

; s =

(linklist)

malloc

(sizeof

(node));

// 生成新結點

s->data = e;

/*開始插入新結點*/

s->next = p-

>next;

// 將p的後繼結點賦值給s的後繼

p->next = s;

// 將s賦值給p的後繼

return

true

;}

宣告乙個指標p指向煉表頭指標,初始化j從1開始

當j若到鍊錶末尾時p為空,則說明第i個結點不存在

否則說明查詢成功,將欲刪除的結點p->next賦值給q

單鏈表的刪除標準語句:p->next = q->next;

釋放q結點(這樣就達到了刪除q結點即p的後繼結點的目的)

/*刪除l的第i個結點,並用e返回其值,l的長度減1*/

bool

listdelete

(linklist *l,

int i)if(

!(p-

>next)

|| j > i)

return

false

;/*開始刪除第i個結點*/

q = p-

>next;

p->next = q-

>next;

// 將q的後繼結點賦值給p的後繼

free

(q);

return

true

;}

/*單鏈表的整表列印*/

void

listprint

(linklist *l)

}

#include

#include

#include

#include

using

namespace std;

typedef

int elementtype;

typedef

struct node

node;

typedef

struct node *linklist;

/*返回l中第i個元素的值*/

elementtype getelem

(linklist *l,

int i)if(

!p || j > i)

// 第i個結點不存在

return0;

e = p-

>data;

return e;

}/*在l中第i個結點位置之前插入新的資料元素e,l的長度加1*/

bool

listinsert

(linklist *l,

int i, elementtype e)if(

!p || j > i)

return

false

; s =

(linklist)

malloc

(sizeof

(node));

// 生成新結點

s->data = e;

/*開始插入新結點*/

s->next = p-

>next;

// 將p的後繼結點賦值給s的後繼

p->next = s;

// 將s賦值給p的後繼

return

true;}

/*刪除l的第i個結點,並用e返回其值,l的長度減1*/

bool

listdelete

(linklist *l,

int i)if(

!(p-

>next)

|| j > i)

return

false

;/*開始刪除第i個結點*/

q = p-

>next;

p->next = q-

>next;

// 將q的後繼結點賦值給p的後繼

free

(q);

return

true;}

/*隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(頭插法,棧)*/

void

createlisthead

(linklist *l,

int n)

}/*隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(尾插法,佇列)*/

void

createlisttail

(linklist *l,

int n)

tail-

>next =

null

;// 迴圈結束後,將當前結點的指標域置空,表示當前鍊錶結束

}/*單鏈表的整表刪除*/

bool

clearlist

(linklist *l)

(*l)

->next =

null

;return

true;}

/*單鏈表的整表列印*/

void

listprint

(linklist *l)

}int

main()

單鏈表的建立與使用

include include define ok 1 define error 0 define true 1 define false 0 typedef int status typedef int elemtype typedef struct lnodelnode,linklist 定義結...

單鏈表 使用C Sharp建立單鏈表

單鏈表及其節點 鍊錶是一系列的儲存資料元素的單元通過指標串接起來形成的,因此每個單元至少有兩個域,乙個域用於資料元素的儲存,另乙個域是指向其他單元的指標。這裡具有乙個資料域和多個指標域的儲存單元通常稱為 結點 node 鍊錶的第乙個結點和最後乙個結點,分別稱為鍊錶的 首結點和 尾結點。尾結點的特徵是...

單鏈表的建立與輸出

單鏈表可以用頭插法建立,也可以用尾插法建立。然而頭插法雖然操作簡單一點,順序卻與輸入順序相反,尾插法雖然操作複雜一點,但是順序卻與輸入順序一致,所以建議使用尾插法。一 頭插法建立鍊錶 1 不用函式 include include typedef struct linknode node,linkli...