实验---实现两个指数递减多项式的和与积
2018-06-17 23:37:41来源:未知 阅读 ()
有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。
【提示】 用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入、删除操作中指针的正确修改。
#include<iostream> #include<cmath> using namespace std; /** 数据结构习题1 多项式的相加和相乘 @刘辉 **/ struct Node{ int data; int index; Node* next; }; Node *insertList(Node* head,Node* p); //插入链表 Node *createList(); //创建链表 void printList(Node *head); //打印链表 Node *addList(Node *p1,Node *p2); //实现加法运算 Node *createList() { int index,data; Node *p,*head,*q; head = new Node; p = head; cout<<"请输入要输入的多项式a的幂指数:"; cin>>index; cout<<"请输入该指数的参数:"; cin>>data; while(index!=0) { q = new Node; q->index = index; q->data = data; p->next = q; p = q; cout<<"请输入要输入的多项式a的幂指数:"; cin>>index; cout<<"请输入该指数的参数:"; cin>>data; } p->next = NULL; return head; } //多项式相加 Node *addList(Node *p1,Node *p2) { int add; Node *temp,*head,*p3; p1 = p1->next; p2 = p2->next; head = temp = new Node; head->next = NULL; while(p1&&p2) { if(p1->index==p2->index) { add = p2->data + p1->data; if(add!=0) { p3 = new Node; p3->index = p2->index; p3->data = add; p3->next = NULL; } p1 = p1->next; p2 = p2->next; } else if(p1->index<p2->index) { p3 = new Node; p3->data = p2->data; p3->index = p2->index; p3->next = NULL; p2 = p2->next; } else { p3 = new Node; p3->data = p1->data; p3->index = p1->index; p3->next = NULL; p1 = p1->next; } if(head->next ==NULL) { head->next = p3; temp = p3; } else { temp->next = p3; temp = p3; } } temp->next = p1?p1:p2; return head; } //多项式相乘 Node* mulList(Node *p1,Node *p2) { Node *head,*temp,*s,*r,*q; head = new Node; head->next = NULL; temp = new Node; temp->next = NULL; p1 = p1->next; p2 = p2->next; for(s=p1;s;s=s->next) { for(r=p2;r;r=r->next) { q = new Node; temp->next = q; q->data = s->data * r->data; q->index = s->index + r->index; q->next = NULL; head = addList(temp,head); } } return head; } //打印多项式 void printList(Node *head) { Node *p = NULL; p = head->next; if(p==NULL) { cout<<"文件为空"; } else { do { if(p->data>=0) cout<<p->data<<"x^"<<p->index; else cout<<p->data<<"x^"<<p->index; if(p->next!=NULL) cout<<"+"; p=p->next; }while(p != NULL); cout<<endl; } } //主函数 int main() { int i; Node *p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL; cout<<"创建第一个多项式的链表:"<<"\n"; p1 = createList(); cout<<"\n"; cout<<"创建第二个多项式的链表:"<<"\n"; p2 = createList(); cout<<"第一个多项式为:"; printList(p1); cout<<"\n"<<"第二个多项式为:"; printList(p2); p3 = addList(p1,p2); //实现多项式相加 cout<<"\n"<<"多项式相加后为:"; printList(p3); cout<<endl; p4 = mulList(p1,p2); //实现多项式相乘 cout<<"多项式相乘后为:"; printList(p4); cin>>i; return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 二叉排序树 2020-05-02
- 抽象宠物类的实现 代码参考 2020-04-29
- 虚函数实现多态性 代码参考 2020-04-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash