赞
踩
1、已知 first 为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法:
(1)求链表中的最大整数:
(2)求链表的结点个数。
(3)求链表中所有元素的平均值。
- #include <iostream>
- using namespace std;
- typedef int Elemtype;
- typedef struct node
- {
- Elemtype data;
- struct node *link;
- } Node,*LinkList;
- //递归算法:求链表中的最大值
- int Max(LinkList first)
- {
- if(first->link == NULL) return first->data; //链表仅一个结点,其值即所求
- int temp = Max(first->link);
- if(first->data>temp) return first->data;
- else return temp;
- }
- //递归算法:求链表中结点个数
- int Num(LinkList first)
- {
- if(first == NULL) return 0; //空链表结点个数为0
- return 1+Num(first->link);
- }
- //递归算法:求链表中所有元素平均值
- float Avg(LinkList first,int &n)
- {
- if(first->link == NULL) //链表仅一个结点
- {
- n = 1;
- return (float)(first->data);
- }
- else
- {
- float Sum = Avg(first->link,n)*n; //先递归求后继链表的平均值
- n++;
- return (first->data + Sum)/n;
- }
- }
2、用单链表存储多项式的结构定义如下:
- typedef struct Term { //多项式的项
- float coef; //系数
- int exp; //指数
- struct Term *link; //链指针
- } Term,*Polynomial;
试编写一个算法,输入一组多项式的系数和指数,按指数降幂的方式建立多项式链表,要求该链表具有表头结点。
如果输入的指数与链表中已有的某一个项的指数相等,则新的项不加入,并报告作废信息。整个输入序列以输入系数为0标志结束。
算法的首部为Polynominal createPoly();
- Polynomial createPoly()
- {
- Polynomial head,p,pre,s;
- float c;int i = 0,e;
- cout<<"建立一个多项式的单链表。"<<endl;
- head = new Term;//创建表头结点
- head->exp = -1;head->link = NULL;//表头结点的exp标志为-1
- while(1)
- {
- cout<<"请输入第"<<++i<<"个结点的信息:"<<endl;
- cin>>c>>e;
- if(c==0) break;
- s = new Term;
- s->coef = c; s->exp = e;
- p = head; pre = NULL;
- while(p!=NULL&&p->exp>e)
- {
- pre = p;
- p = p->link;
- }
- if(p!=NULL&&p->exp==e) cout<<"输入项的指数重复,此次输入作废!"<<endl;
- else
- {
- s->link = p;
- pre->link = s;
- }
- }
- return head;
- }
给出在多项式中插入新项的算法Insert。各个项的指数ei按递减顺序排列:em-1>em-2>...>e0>0 该算法的功能是:如果多项式中
没有与新项的指数相等的项,则将此新项插入到多项式链表的适当位置;如果多项式中已有与新项指数相等的项,则将它们合并。
- typedef struct Term
- {
- float coef;
- int exp;
- struct Term *link;
- } Term,*Polynominal;
- void Insert(Polynominal poly,Term *t)
- {
- Polynominal p = poly,pre = NULL;
- while(p!=NULL&&p->exp>t->exp)
- {
- pre = p;
- p = p->link;
- }
- if(p->exp==t->exp)
- {
- if(p->coef + t->coef!=0)
- {
- p->coef=p->coef+t->coef; //合并
- }
- else
- {
- pre->link = p->link; //删除p结点
- delete p;
- }
- }
- else if(pre==NULL) //空表,链接在首部
- {
- t->link = poly;
- poly = t;
- }
- else //p->exp<t->exp 插在p之前(包括p=NULL,链尾)
- {
- pre->link = t;
- t->link = p;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。