單鏈表C語言實現 Need edition

2021-06-22 17:37:23 字數 3970 閱讀 5309

帶頭結點的單鏈表

實現了一些操作及快速排序,效率不高,需要改進。

單鏈表的快速排序的實現。

見博文:懶得複製,請戳)

1、首次思路:首元素作為中軸,對後續節點一次遍歷,小於者插入到中軸前,大於者,保持不動。操作物件:指標。

2、參考上面的博文,指標不動,進行值交換。操作物件:數值。

3、優化:迭代+遞迴。戳戳戳1、戳戳戳2。

code1:

見code最後

code2:

void qsortslist(listnode *pbeg, listnode *pend) 

listnode *pivot = pbeg->next;

// 僅乙個元素

if (pivot->next == pend)

listnode *slow = pivot;

listnode *fast = slow->next;

while (fast != pend)

fast = fast->next;

}swap(pivot, slow);

pivot = slow;

qsortslist(pbeg, pivot);

qsortslist(pivot, pend);

}void swap(listnode *p, listnode *q)

code3:

code:c語言編譯,不涉及c++

#include #include #include typedef int elemtype;

typedef struct _listnodelistnode;

listnode * initslist();

int isempty(listnode *head);

void printslist(listnode *head);

int insertathead(listnode *head, elemtype e);

int addtotail(listnode *head, elemtype e);

void inserttoorderlysl(listnode *head, elemtype e);

listnode * getptr(listnode *head, int n);

int getsize(listnode *head);

listnode *findelem(listnode *head, elemtype e);

listnode *gettailptr(listnode *head);

void clearslist(listnode *head);

elemtype rmtail(listnode *head);

int delelemx(listnode *head, elemtype e);

void delallx(listnode *head, elemtype e);

void destroysl(listnode *head);

/* 申請乙個節點 */

listnode *mallocnode(elemtype e)

/* 新建並初始化乙個鍊錶 */

listnode * initslist()

/* 是否空 */

int isempty(listnode *head) else

}/* 頭插法 */

int insertathead(listnode *head, elemtype e)

p->next = head->next;

head->next = p;

return 1;

}/* 尾部插入乙個元素 */

int addtotail(listnode *head, elemtype e)

listnode *tail = head;

while (tail->next != null)

tail->next = p;

p->next = null;

return 1;

}/* 輸出元素 */

void printslist(listnode *head)

listnode *p = head->next;

while (p)

printf("\n");

}/* 在第n個位置插入元素 */

int insertatn(listnode *head, int n, elemtype e)

listnode *p = mallocnode(e);

p->next = pre->next;

pre->next = p;

return 1;

}/* 獲得第n給元素的指標 */

listnode * getptr(listnode *head, int n)

listnode *p = head->next;

int cur = 1;

while (p && cur < n)

// if (p) else

return p;

}/* 獲取大小 */

int getsize(listnode *head)

return size;

}/* 清空鍊錶 */

void clearslist(listnode *head)

}/* 查詢元素 */

listnode *findelem(listnode *head, elemtype e)

p = p->next;

}return null;

}/* 向有序單鏈表中插入元素x結點,使得插入後仍然有序 */

void inserttoorderlysl(listnode *head, elemtype e)

listnode *t = mallocnode(e);

t->next = p->next;

p->next = t;

}/* 獲取尾元素指標 */

listnode *gettailptr(listnode *head)

return tail;

}/* 從單鏈表中刪除表尾結點並返回它的值 */

elemtype rmtail(listnode *head)

elemtype tailval = tail->data;

pretail->next = null;

free(tail);

return tailval;

}/* 從單鏈表中刪除值為x的第乙個結點 */

int delelemx(listnode *head, elemtype e)

pre = pre->next;

p = pre->next;

}return 0;

}/* 從單鏈表中刪除值為x的所有結點 */

void delallx(listnode *head, elemtype e) else

p = pre->next;

}}/* 快速排序 */

void qsortslist(listnode *pbeg, listnode *pend)

listnode *pivot = pbeg->next;

// 僅乙個元素

if (pivot->next == pend)

listnode *pre = pivot;

listnode *p = pre->next;

while(p != pend) else

p = pre->next;

}// printslist(pbeg);

qsortslist(pbeg, pivot);

qsortslist(pivot, pend);

}/* 銷毀鍊錶 */

void destroysl(listnode *head)

int main()

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...

C語言實現單鏈表

dev c 編譯執行通過,實現了單鏈表的構建,清空,插入,刪除和查詢。include include include include include define ok 1 define error 0 typedef int elemtype typedef struct node node ty...