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