当前位置:   article > 正文

第四周 【项目3 - 单链表应用】_目的深入握单链表应用的算法设计内容写个程序)用户的符结化为头结点的单链表

目的深入握单链表应用的算法设计内容写个程序)用户的符结化为头结点的单链表

 

  1. /*
  2. *Copyright ? 2017, 烟台大学计算机与控制工程学院
  3. *All rights reserved.
  4. *文件名称:main.cpp
  5. *作 者:黎兆阳
  6. *完成日期:2017年9月26日
  7. *版本号:v1.0
  8. *
  9. *问题描述:单链表:逆置、连接与递增判断
  10. *输入描述:
  11. *程序输出:见截图
  12. */

单链表:逆置、连接与递增判断:

 1、设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。 

工程截图:

  main.cpp:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include "linklist.h"
  4. void Reverse(LinkList *&L)
  5. {
  6. LinkList *p=L->next,*q;
  7. L->next=NULL;
  8. while (p!=NULL) //扫描所有的结点
  9. {
  10. q=p->next; //让q指向*p结点的下一个结点
  11. p->next=L->next; //总是将*p结点作为第一个数据结点
  12. L->next=p;
  13. p=q; //让p指向下一个结点
  14. }
  15. }
  16. int main()
  17. {
  18. LinkList *L;
  19. ElemType a[]= {1,3,5,7, 2,4,8,10};
  20. CreateListR(L,a,8);
  21. printf("L:");
  22. DispList(L);
  23. Reverse(L);
  24. printf("逆置后L: ");
  25. DispList(L);
  26. DestroyList(L);
  27. return 0;
  28. }
程序截图:


 2、已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n,请设计算法将L2连接到L1的后面。实现这个算法,完成测试,并分析这个算法的复杂度。 

main.cpp:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include "linklist.h"
  4. void Link(LinkList *&L1, LinkList *&L2)
  5. {
  6. LinkList *p = L1;
  7. while(p->next != NULL) //找到L1的尾节点
  8. p = p->next;
  9. p->next = L2->next; //将L2的首个数据节点连接到L1的尾节点后
  10. free(L2); //释放掉已经无用的L2的头节点
  11. }
  12. int main()
  13. {
  14. LinkList *A, *B;
  15. int i;
  16. ElemType a[]= {1,3,2,9};
  17. ElemType b[]= {0,4,7,6,5,8};
  18. InitList(A);
  19. for(i=3; i>=0; i--)
  20. ListInsert(A, 1, a[i]);
  21. InitList(B);
  22. for(i=5; i>=0; i--)
  23. ListInsert(B, 1, b[i]);
  24. Link(A, B);
  25. printf("A:");
  26. DispList(A);
  27. DestroyList(A);
  28. return 0;
  29. }
程序截图:


 3、设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。 

main.cpp:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include "linklist.h"
  4. bool increase(LinkList *L)
  5. {
  6. LinkList *p = L->next, *q; //p指向第1个数据节点
  7. if(p != NULL)
  8. {
  9. while(p->next != NULL)
  10. {
  11. q = p->next; //q是p的后继
  12. if (q->data > p->data) //只要是递增的,就继续考察其后继
  13. p = q;
  14. else
  15. return false; //只要有一个不是后继大于前驱,便不是递增
  16. }
  17. }
  18. return true;
  19. }
  20. int main()
  21. {
  22. LinkList *A, *B;
  23. int i;
  24. ElemType a[]= {1, 3, 2, 9};
  25. ElemType b[]= {0, 4, 5 ,6, 7, 8};
  26. InitList(A);
  27. for(i=3; i>=0; i--)
  28. ListInsert(A, 1, a[i]);
  29. InitList(B);
  30. for(i=5; i>=0; i--)
  31. ListInsert(B, 1, b[i]);
  32. printf("A: %c\n", increase(A)?'Y':'N');
  33. printf("B: %c\n", increase(B)?'Y':'N');
  34. DestroyList(A);
  35. DestroyList(B);
  36. return 0;
  37. }
程序截图:

     

   








声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/609281
推荐阅读
相关标签
  

闽ICP备14008679号