C语言之基于链表实现排序

女爷i 2023-10-07 09:20 110阅读 0赞

题目:通过链表实现从小到大进行排序

代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 9
  4. //通过链表实现从小到大排序
  5. typedef struct node {
  6. int data;
  7. struct node *next;
  8. } NODE;
  9. //fun函数实现是将头结点的单向链表节点数据域中的数据从小到大排序
  10. void fun(NODE *h)
  11. {
  12. NODE *p, *q;
  13. int t;
  14. p = h->next ;
  15. while (p) {
  16. q = p->next ;
  17. while (q) {
  18. if (p->data > q->data)
  19. {
  20. t = p->data;
  21. p->data = q->data;
  22. q->data = t;
  23. }
  24. q = q->next;
  25. }
  26. p = p->next;
  27. }
  28. }
  29. NODE *creatlist(int a[])
  30. {
  31. NODE *h,*p,*q;
  32. int i;
  33. h = (NODE *)malloc(sizeof(NODE));
  34. h->next = NULL;
  35. for(i=0; i<N; i++)
  36. {
  37. q=(NODE *)malloc(sizeof(NODE));
  38. q->data=a[i];
  39. q->next = NULL;
  40. if (h->next == NULL){
  41. h->next = p = q;
  42. }
  43. else{
  44. p->next = q;
  45. p = q;
  46. }
  47. }
  48. return h;
  49. }
  50. void outlist(NODE *h)
  51. {
  52. NODE *p;
  53. p = h->next;
  54. if (p==NULL){
  55. printf("The list is NULL!\n");
  56. }
  57. else
  58. {
  59. printf("\nHead ");
  60. do
  61. {
  62. printf("->%d", p->data); p=p->next;
  63. }while(p!=NULL);
  64. printf("->End\n");
  65. }
  66. }
  67. int main()
  68. {
  69. NODE *head;
  70. int a[N]= {0, 10, 4, 2, 8, 6 , 1 , 5 , 7};
  71. head=creatlist(a);
  72. printf("\nThe original list:\n");
  73. outlist(head);
  74. fun(head);
  75. printf("\nThe list after sorting :\n");
  76. outlist(head);
  77. return 0;
  78. }

效果截图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNjgwMzI3_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言——排序

    单链表排序   前言: 最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。 交换节点:插入排序,冒泡排序,简单选择排序 交换数据:快速排序 ...

    相关 C语言排序

    链表的排序 许多人认为链表排序是这里面最难得,因为大家脑海里面对于前面插入,删除的 方法已经熟悉了,可能最容易想到的就是从结点和结点之间的联系入手,确实最