当前位置:   article > 正文

线性表习题二_已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算

已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算

1、已知 first 为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法

(1)求链表中的最大整数:

(2)求链表的结点个数。

(3)求链表中所有元素的平均值。

  1. #include <iostream>
  2. using namespace std;
  3. typedef int Elemtype;
  4. typedef struct node
  5. {
  6. Elemtype data;
  7. struct node *link;
  8. } Node,*LinkList;
  9. //递归算法:求链表中的最大值
  10. int Max(LinkList first)
  11. {
  12. if(first->link == NULL) return first->data; //链表仅一个结点,其值即所求
  13. int temp = Max(first->link);
  14. if(first->data>temp) return first->data;
  15. else return temp;
  16. }
  17. //递归算法:求链表中结点个数
  18. int Num(LinkList first)
  19. {
  20. if(first == NULL) return 0; //空链表结点个数为0
  21. return 1+Num(first->link);
  22. }
  23. //递归算法:求链表中所有元素平均值
  24. float Avg(LinkList first,int &n)
  25. {
  26. if(first->link == NULL) //链表仅一个结点
  27. {
  28. n = 1;
  29. return (float)(first->data);
  30. }
  31. else
  32. {
  33. float Sum = Avg(first->link,n)*n; //先递归求后继链表的平均值
  34. n++;
  35. return (first->data + Sum)/n;
  36. }
  37. }

2、用单链表存储多项式的结构定义如下:

  1. typedef struct Term { //多项式的项
  2. float coef; //系数
  3. int exp; //指数
  4. struct Term *link; //链指针
  5. } Term,*Polynomial;
试编写一个算法,输入一组多项式的系数和指数,按指数降幂的方式建立多项式链表,要求该链表具有表头结点。

如果输入的指数与链表中已有的某一个项的指数相等,则新的项不加入,并报告作废信息。整个输入序列以输入系数为0标志结束。

算法的首部为Polynominal createPoly();

  1. Polynomial createPoly()
  2. {
  3. Polynomial head,p,pre,s;
  4. float c;int i = 0,e;
  5. cout<<"建立一个多项式的单链表。"<<endl;
  6. head = new Term;//创建表头结点
  7. head->exp = -1;head->link = NULL;//表头结点的exp标志为-1
  8. while(1)
  9. {
  10. cout<<"请输入第"<<++i<<"个结点的信息:"<<endl;
  11. cin>>c>>e;
  12. if(c==0) break;
  13. s = new Term;
  14. s->coef = c; s->exp = e;
  15. p = head; pre = NULL;
  16. while(p!=NULL&&p->exp>e)
  17. {
  18. pre = p;
  19. p = p->link;
  20. }
  21. if(p!=NULL&&p->exp==e) cout<<"输入项的指数重复,此次输入作废!"<<endl;
  22. else
  23. {
  24. s->link = p;
  25. pre->link = s;
  26. }
  27. }
  28. return head;
  29. }

给出在多项式中插入新项的算法Insert。各个项的指数ei按递减顺序排列:em-1>em-2>...>e0>0  该算法的功能是:如果多项式中

没有与新项的指数相等的项,则将此新项插入到多项式链表的适当位置;如果多项式中已有与新项指数相等的项,则将它们合并。

  1. typedef struct Term
  2. {
  3. float coef;
  4. int exp;
  5. struct Term *link;
  6. } Term,*Polynominal;
  7. void Insert(Polynominal poly,Term *t)
  8. {
  9. Polynominal p = poly,pre = NULL;
  10. while(p!=NULL&&p->exp>t->exp)
  11. {
  12. pre = p;
  13. p = p->link;
  14. }
  15. if(p->exp==t->exp)
  16. {
  17. if(p->coef + t->coef!=0)
  18. {
  19. p->coef=p->coef+t->coef; //合并
  20. }
  21. else
  22. {
  23. pre->link = p->link; //删除p结点
  24. delete p;
  25. }
  26. }
  27. else if(pre==NULL) //空表,链接在首部
  28. {
  29. t->link = poly;
  30. poly = t;
  31. }
  32. else //p->exp<t->exp 插在p之前(包括p=NULL,链尾)
  33. {
  34. pre->link = t;
  35. t->link = p;
  36. }
  37. }







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

闽ICP备14008679号