演算法與資料結構 單向鍊錶的直接插入排序和快速排序

2021-08-06 03:53:03 字數 2049 閱讀 2544

本文將介紹單向鍊錶的直接插入排序快速排序

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