本文將介紹單向鍊錶的直接插入排序和快速排序。
1. 單鏈表進行直接插入排序
1.1 直接插入排序函式
/* 直接插入排序 */
//本文中使用不帶頭結點的鍊錶
struct listnode *listinsertsort(struct listnode *l)
//無序鍊錶遍歷
originlistnode = originlistnode -> next;
//節點插入到l之前或prenode和nodescan之間
if (nodescan == l)
l = newnode;
else
prenode -> next = newnode;
newnode -> next = nodescan;
//返回排序後鍊錶首指標
return l;
}}//在有序鍊錶中尋找合適插入位置也可寫成:
for (newnode = originlistnode, nodescan = l; (nodescan !=
null) && (nodescan ->
data) < (newnode ->
data); prenode = nodescan, nodescan = nodescan -> next);
1.2 完整示例程式
#include
#include
//單向鍊錶定義
typedef struct lnode
lnode;
typedef lnode *linklist;
//函式宣告
linklist creatlink(int num);
linklist linkinsertsort(linklist head);
void printlink(linklist head);
/* 鍊錶建立 */
linklist creatlink(int num)
else
rearnode = newnode;
}return head;
}/*************************************
功能: 直接插入排序
陣列直接插入排序:待排序陣列 + 排序後陣列
鍊錶直接插入排序:待排序鍊錶 + 排序後鍊錶
***************************************/
linklist linkinsertsort(linklist head)
return head;
}/* 鍊錶輸出函式 */
void printlink(linklist head)
}int main()
2. 單鏈表進行快速排序
/* 首先定義元素搜尋函式 */
//返回第pos個節點指標
struct listnode *nodesearch(struct listnode *l, int pos)
/* 再定義鍊錶元素交換函式 */
//交換兩個節點元素值node->data
void exchangenode(struct listnode *l, int i, int j)
/* 元素整理 */
int elementsort(struct listnode *l, int left, int right)
exchangenode(l, index + 1, right);
}return index + 1;
}/* 快速排序 */
void listquicksort(struct listnode *l, int left, int right)
}
acknowledgements:
2017.08.13
資料結構 單向鍊錶
鍊錶結構的資料格式儲存 include stdafx.h 把這行放在最開始。include includeusing namespace std typedef struct data typedef struct node 這裡與上面的不同是多了node,注意如果沒有這個node,下面的struc...
資料結構(單向鍊錶)
ifndef linklist h define linklist h 鍊錶節點 template class linklistdata linklistdata linklistdata 獲取資料 t getdata public t data 資料 template class linklist...
資料結構 單向鍊錶
錯誤 h next null 或其他 讓指標指向空 的語句執行報錯 null undeclared identifier cannot convert from int to struct node 原因 未引入標頭檔案 include stdio.h 把null定義為乙個空位址是在 stdio標頭...