当前位置:   article > 正文

[C语言、C++]数据结构作业:无头单链表—递归创建+递归求最大值_假设一个不带头结点的单链表h,设计递归算法求最大值

假设一个不带头结点的单链表h,设计递归算法求最大值

递归创建+递归求最大值

递归建立一个具有n个结点的无头单链表,并递归求这个单链表中数据的最大值

样例:n=6,结点数据分别为:20  100   5  214  88 99

main中:

1、递归创建。

2、遍历输出。

3、递归求最大值并打印

4、destory。

  1. #include <iostream>
  2. using namespace std;
  3. typedef int ElemType;
  4. typedef struct LinkNode {
  5. ElemType data;
  6. LinkNode* next;
  7. }*LinkList;
  8. void InitLinkList(LinkList& L) {
  9. L = NULL;
  10. }
  11. void Traverse(const LinkList& L) {
  12. LinkNode* p = L; //设p指向首元结点
  13. while (p) { //有结点则进行
  14. cout << p->data << endl;
  15. p = p->next; //结点指针后移
  16. }
  17. }
  18. void DestroyList(LinkList& L) {
  19. LinkNode* p = L;
  20. while (p)
  21. {
  22. L = L->next;
  23. delete(p);
  24. p = L;
  25. }
  26. }
  27. void RecCreatHead(LinkList& L, int n) {//递归法头插创建无头链表
  28. if (n != 0) {
  29. LinkNode* s = new LinkNode;
  30. cin >> s->data;
  31. s->next = L;
  32. L = s;
  33. RecCreatHead(L, n - 1);
  34. }
  35. }
  36. int RecMax(LinkList& L) {
  37. if (L->next) {
  38. return(L->data >= RecMax(L->next)) ? L->data : RecMax(L->next);
  39. }
  40. else {
  41. return L->data;
  42. }
  43. }
  44. int main() {//样例:n=6,结点数据分别为:20 100 5 214 88 99
  45. LinkList L;
  46. InitLinkList(L);
  47. RecCreatHead(L, 6);//1、递归创建。
  48. cout << "==========遍历==========="<<endl;
  49. Traverse(L);//2、遍历输出
  50. cout << "========================="<<endl;
  51. cout<<"经过递归求解,最大值为:" << RecMax(L);//3、递归求最大值并打印
  52. DestroyList(L);//4、destory
  53. }

思路:

分问题:

若该节点指针指向的下一个节点存在,则比较该节点与下一个节点的大小,返回较大值

总问题:回退到整体

即比较 第一个节点的元素后面所有元素中的最大值 的大小

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

闽ICP备14008679号