数据结构—单链表—直接插入排序

骑猪看日落 2022-08-21 13:44 306阅读 0赞

有一个带头节点的单链表L(至少有一个数据节点),设计一个程序使其元素呈递增有序排列 。

思路:

先构造一个只含有一个数据节点的有序表。然后扫描单链表L余下的节点*p(直到p为NULL为止),在有序表中通过比较找插入*p节点的前驱节点*pre,然后在*pre节点之后插入*p节点。

  1. #include <iostream>
  2. using namespace std;
  3. #include <malloc.h>
  4. typedef int ElemType;
  5. typedef struct LNode
  6. {
  7. ElemType data;
  8. struct LNode *next;
  9. } LinkList;
  10. void sort(LinkList *&L)
  11. {
  12. LinkList *p,*pre,*q;
  13. p=L->next->next; //p指向L的第2个数据节点
  14. L->next->next=NULL; //构造只含有一个数据节点的有序表
  15. while(p!=NULL)
  16. {
  17. q=p->next; //q保存*p节点后继节点的指针
  18. pre=L; //从有序表开头进行比较
  19. while(pre->next!=NULL&&pre->next->data<p->data) //在有序表中查找*p插入的前驱节点*pre
  20. pre=pre->next;
  21. p->next=pre->next; //将*p插入*pre之后
  22. pre->next=p;
  23. p=q; //扫描原链表余下的节点
  24. }
  25. }
  26. int main()
  27. {
  28. LinkList *L=(LinkList *)malloc(sizeof(LinkList)),*p,*r;
  29. L->next=NULL;
  30. r=L;
  31. ElemType a[10]={3,8,2,7,1,5,3,4,6,0};
  32. for(int i=0;i<10;i++)
  33. {
  34. p=(LinkList *)malloc(sizeof(LinkList));
  35. p->data=a[i];
  36. r->next=p;
  37. r=p;
  38. }
  39. r->next=NULL;
  40. cout<<"排序后为:"<<endl;
  41. sort(L);
  42. p=L->next;
  43. while(p!=NULL)
  44. {
  45. cout<<p->data<<" ";
  46. p=p->next;
  47. }
  48. cout<<endl;
  49. return 0;
  50. }

运行结果:

Center

发表评论

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

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

相关阅读

    相关 数据结构--直接插入排序

    直接插入排序 概念 插入排序的基本思想是:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序地插入到已排好序的记录子集中,直到将所有待排记录全部插入为