链表排序

分手后的思念是犯贱 2022-05-27 06:18 309阅读 0赞

链表排序代码

  1. #include <iostream>
  2. typedef struct node{
  3. int data;
  4. struct node *next;
  5. }*LinkList,LNode;
  6. void Init(LinkList &L)//带头节点
  7. {
  8. L=(LinkList)malloc(sizeof(LNode));
  9. L->next=NULL;
  10. }
  11. void Insert(LinkList &L,int m)//输入一组数,尾插法
  12. {
  13. LinkList p,q;
  14. p=(LinkList)malloc(sizeof(LNode));
  15. p->data=m;
  16. p->next=NULL;
  17. q=L;
  18. if(L==NULL) //首节点为空
  19. { L=p; //L指向p
  20. p->next=NULL;
  21. }
  22. else{
  23. while (q->next!=NULL)
  24. {
  25. q=q->next;//到尾巴时
  26. }
  27. q->next=p; //插入结点
  28. }
  29. }
  30. void Sort(LinkList &L)
  31. {
  32. LinkList p,q;
  33. p=(LinkList)malloc(sizeof(LNode));
  34. q=(LinkList)malloc(sizeof(LNode));
  35. int h;
  36. q=L->next;
  37. while (q->next) {
  38. p=q->next;
  39. while (p) {
  40. if(p->data<q->data)
  41. {
  42. h=p->data;
  43. p->data=q->data;
  44. q->data=h;
  45. }
  46. else {
  47. p=p->next;
  48. }
  49. }
  50. q=q->next;
  51. }
  52. }
  53. void Print(LinkList &L)//显示单向链表
  54. {
  55. LinkList p;
  56. p=(LinkList)malloc(sizeof(LNode));
  57. p=L->next;
  58. while(p)
  59. { printf("%d ",p->data);
  60. p=p->next;
  61. }
  62. printf("\n");
  63. }
  64. int main(int argc, const char * argv[]) { LinkList L; int data,number; Init(L); Print(L); scanf("%d",&number); for(int i=0;i<number;i++) { scanf("%d",&data); Insert(L,data);//1.尾插法,输入元素 } Sort(L); Print(L); return 0; }

发表评论

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

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

相关阅读

    相关 排序--归并排序

    要求在空间复杂度为O(1)的情况下对链表进行排序,在不考虑时间复杂度的情况下可以考虑冒泡排序,只对链表中的值进行操作,这样时间复杂度为O(n^2)。用归并排序,时间复杂度为O(

    相关 排序

    算法思想:采用直接插入排序算法的思想,先构成只含一个数据结点的有序单链表,然后一次扫描剩下的结点p(直至p==NULL为止),在有序表中通过比较查找插入p的前驱结点pre,然后

    相关 排序-归并

    链表排序,可以插入排序,我就不写了。 实现归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Con

    相关 排序

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