已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。

题目
已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。


相似考题
参考答案和解析
参考答案:
  [算法描述]
  ①
  int GetMax(LinkList p)
  {
  if(!p->next)
  return p->data;
  else
  {
  int max=GetMax(p->next);
  return p->data>=max ? p->data:max;
  }
  }
  ②
  int GetLength(LinkList p)
  {
  if(!p->next)
  return 1;
  else
  {
  return GetLength(p->next)+1;
  }
  }
  ③
  double GetAverage(LinkList p , int n)
  {
  if(!p->next)
  return p->data;
  else
  {
  double ave=GetAverage(p->next,n-1);
  return (ave*(n-1)+p->data)/n;
  }
  }
更多“已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。 ”相关问题
  • 第1题:

    单向链表中往往含有一个头结点,该结点不存储数据元素,一般令链表的头指针指向该结点,而该结点指针域的值为第一个元素结点的指针。以下关于单链表头结点的叙述中,错误的是()。

    A.若在头结点中存入链表长度值,则求链表长度运算的时间复杂度为O(1)
    B.在链表的任何一个元素前后进行插入和删除操作可用一致的方式进行处理
    C.加入头结点后,在链表中进行查找运算的时间复杂度为O(1)
    D.加入头结点后,代表链表的头指针不因为链表为空而改变

    答案:C
    解析:
    在链表中加入头结点后,查找表中某一元素仍然要从头指针出发,顺序找到目标元素或失败时找到表尾为止,时间复杂度与表长成正比。故D项错误。

  • 第2题:

    2、下列叙述中错误的是()

    A.循环链表中有一个表头结点

    B.循环链表的存储空间是连续的

    C.循环链表的表头指针与循环链表中最后一个结点的指针均指向表头结点

    D.循环链表实现了空表与非空表运算的统—


    B 解析:二叉链表是二叉树的一种存储结构;循环队列是队列的一种存储结构,而队列属于线性表,因此,循环队列也是线性表;带链的队列是队列的一种存储结构.因此,选项A),C)、D)都是正确的。循环链表是一般线性表的一种链式存储结构,它不是循环队列的存储结构。因此,选项B)中的说法是错误的。

  • 第3题:

    试设计一个结点数据类型为整型的带表头结点的有序单链表,然后设计一个算法,该算法将这个有序单链表划分成两个单链表,使得第一个单链表中包含原单链表中所有数值为奇数的结点,第二个单链表中包含原单链表中所有数值为偶数的结点,且两个单链表中结点的相对排列顺序与原单链表中相同。 【要求】要求使用原单链表的空间,表头结点可以另辟空间。 【提示】请先在自己的稿纸上作答,然后将全部答题过程及所得结果拍照,以图片形式作为附件上传。请确保照片中的字迹足够清晰、解答过程完整。


    D解析:若要删除结点需要改变尾指针的指向。

  • 第4题:

    试写一算法将单链表中所有值为x的结点删除,返回被删除结点的个数,假设单链表中数据元素类型为整型。


    O(n)

  • 第5题:

    已知一个带有表头结点的非空单链表,结点结构为: data link 假设该链表中data域中存放的是整数,且只给出了头指针list,在不改变链表的前提下,请设计一个尽可能高效的算法,输出链表中所有间隔为k(k为正整数)的两个结点元素的和。要求: (1)给出算法的基本设计思想(3分) (2)根据设计思想,采用类C语言描述算法,关键之处给出简要注释。(7分)