1.節點型別:
//單鏈表節點所裝的資料
typedef
struct lnodelnode,
*linklist;
2.把資料封裝成節點單獨做成乙個函式,簡潔明瞭。
//給乙個資料data,做成乙個節點型別
lnode*
getnode
(elemtype e)
3…單鏈表的頭插法形成鍊錶
注意:先分節點 在讀資料。如果先讀資料 在做節點的話會導致-1也做成節點
void
list_headinsert
(linklist &l)
}
4.單鏈表的尾插法形成鍊錶
//尾插法建立鍊錶
void
list_tailinsert
(linklist &l)
}
5.按序號查詢節點i為第幾個節點
//按序號查詢節點
lnode *
getelem
(linklist l,
int i)
return p;
}
6.按值查到表的節點,**簡潔明瞭
//按值查到表的節點
lnode *
locateelem
(linklist l, elemtype e)
return p;
}
7.任意第 i 位置插入節點e
擴充套件前插操作:方法一,同下述方法可以找到i-1的節點,後插法即可;方法二,找到第 i 的節點,進行後插法,data資料進行互換。
//任意i位置插入節點
void
listinsert_i
(linklist &l,
int i, elemtype e)
8.刪除第i個位置的節點,找i-1進行刪除
擴充套件方法:找到i,換掉 i 和 i+1的data,刪除後繼i+1。
//刪除第i個位置的節點
void
delete_node
(linklist &l,
int i)
9.單鏈表其他常用演算法操作
//(1)遞迴刪除不帶頭節點l中所有值為x的節點
void
del_x_1
(linklist &l, elemtype x)
else
del_x_1
(l->next,x);}
//(2)單鏈表中刪除所有值為x的節點
void
del_x_2
(linklist &l,elemtype x)
else}}
//(3)逆置鍊錶遞迴法,有空間的消耗
void
reverse_print
(linklist l)
//(4)o(n)演算法刪除單鏈表中最小的數,演算法思想,冒泡法到剩最後兩個數。
void
del_min
(linklist &l)
lnode *p=l->next->next;
//p指向第二個節點
while
(p->next!=
null
)//遍歷單鏈表冒泡法到最後兩個數
else}if
(pre->data < p->data)
//最後兩個前驅小的話,交換資料
pre->next=
null
;free
(p);
}//(5)鍊錶的逆置,兩種非遞迴解法,空間o(1),第(3)題是逆置的遞迴解法但有空間消耗
void
reverse_list_1
(linklist &l)
}void
reverse_list_2
(linklist &l)
l->next=p;
}
單鏈表的操作
單鏈表是一種非常重要的資料結構,下面用c語言對單鏈表的操作做乙個簡單的總結 typedef struct nodenode,linklist 1 單鏈表的建立 建立乙個單鏈表,鍊錶裡面存放有十個偶數 2到20 有頭節點,頭節點不存放元素。linklist createlinklist return ...
單鏈表的操作
1.定義單鏈表的介面函式 ifndef linklist h define linklist h typedef int elemtype typedef struct node node node initnode bool addnode node head,elemtype data 頭插法 ...
單鏈表的操作
pragma once extern c list node,list link 頭插建立鍊錶 list link create list head int n 尾插法建立鍊錶 list link creat list tail int n 獲取長度 int get list length list...