shujujiegou.txt.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2009-11-22 14:28
    上传日期
该程序的功能是要能够实现高次稀疏多项式的加减乘运算,并能够正确显示。
shujujiegou.txt.rar
  • shujujiegou.txt.txt
    5.9KB
内容介绍
#include <iostream> using namespace std; //#include <stdio.h> #include <stdlib.h> #include <math.h> #define NULL 0 typedef struct LNode{ float coef; int exp; struct LNode *next; }LNode,*LinkList; //用于多项式 void insertPolylist(LinkList La,LinkList Lb) //有序的在多项式中插入一个项 { LinkList p=La->next,pre=La; //pre为p的前驱 while(p!=NULL && Lb->exp>p->exp){ p=p->next; pre=pre->next; } //确定Elem插入的位置 if(p==NULL) { Lb->next=NULL;pre->next=Lb;} //若多项式没有项,在链表表尾插入 else if(Lb->exp==p->exp) return; //若Elem的指数与多项式中某项相同,则跳过,不插入 else { Lb->next=pre->next;pre->next=Lb;} //在p之前插入 } LinkList polycreate() //创建多项式,其中项按指数递增排列,若输入时两项指数相同,则只输入第一个,另一个舍弃 { LinkList head =(LNode*)malloc(sizeof(LNode)); //建头结点 head->next = NULL; head->exp = -1; LinkList p; float c; int e; cout<<"请输入多项式各项的系数和指数,如“2.2,1”,当系数为0时,输入结束\n"; scanf("%f,%d",&c,&e); //键入多项式的系数和指数 while(c!=0){ //若c==0,则代表多项式的输入结束 p=(LinkList)malloc(sizeof(LNode)); //申请新结点 p->coef = c; p->exp = e; insertPolylist(head,p); //有序的在多项式中插入p scanf("%f,%d",&c,&e); } return(head); } int printPolylist(LinkList head) //打印多项式 { LinkList p = head->next; if(p == NULL) { cout<<"0"; return 0; } while(p->next != NULL){ if(p->coef < 0) cout<<"("<<p->coef<<"x^"<<p->exp<<")"<<" + "; else cout<<p->coef<<"x^"<<p->exp<<" + "; p=p->next; } if(p->coef < 0) cout<<"("<<p->coef<<"x^"<<p->exp<<")"<<" \n "; else cout<<p->coef<<"x^"<<p->exp<<endl; return 1; } LinkList AddPolyn(LinkList La,LinkList Lb) { LinkList Lc; LinkList p,q,s,r; s = (LinkList) malloc(sizeof (LNode)); Lc = (LinkList)malloc(sizeof(LNode)); p = La->next; q = Lb->next; Lc->next = NULL;// 在给Lc->next重新赋值之前,要将La->next保存起来,否则会同时更改La->next的值 切记!!! r = Lc; while (p && q) { if (p->exp < q->exp) { s = (LinkList) malloc (sizeof (LNode)); s ->coef = p ->coef; s ->exp = p ->exp ; s ->next = p ->next ; p = p->next; s->next = r->next; r->next=s; r = r ->next ; } else if(p ->exp > q -> exp) { s = (LinkList) malloc (sizeof (LNode)); s ->coef = q->coef; s ->exp = q ->exp ; s ->next = q ->next ; q = q->next; s->next = r->next; r->next=s; r = r ->next ; } else { if(p -> coef + q ->coef != 0) { s = (LinkList) malloc (sizeof (LNode)); s->coef = p ->coef + q->coef; s->exp = p ->exp ; s ->next = p ->next ; p = p->next; q = q -> next; s->next = r->next; r->next=s; r = r ->next ; } else { p = p->next; q = q -> next; } } } if (p) r ->next = p; else r->next = q;//将剩下的项一个个摘下,逆向插入 return Lc; } LinkList DecPolyn(LinkList La,LinkList Lb) { LinkList Lc; LinkList p,q,s,r; s = (LinkList) malloc(sizeof (LNode)); Lc = (LinkList)malloc(sizeof(LNode)); p = La->next; q = Lb->next; Lc->next = NULL;// 在给Lc->next重新赋值之前,要将La->next保存起来,否则会同时更改La->next的值 切记!!! r = Lc; while (p && q) { if (p->exp < q->exp) { s = (LinkList) malloc (sizeof (LNode)); s ->coef = p ->coef; s ->exp = p ->exp ; s ->next = p ->next ; //s = p; p = p->next; s->next = r->next; r->next=s; r = r ->next ; } else if(p ->exp > q -> exp) { s = (LinkList) malloc (sizeof (LNode)); s ->coef = 0 - q->coef; s ->exp = q ->exp ; s ->next = q ->next ; q = q->next; s->next = r->next; r->next=s; r = r ->next ; } else { if(p -> coef - q ->coef != 0) { s = (LinkList) malloc (sizeof (LNode)); s->coef = p ->coef - q->coef; s->exp = p ->exp ; s ->next = p ->next ; p = p->next; q = q -> next; s->next = r->next; r->next = s; r = r ->next ; } else { p = p->next; q = q -> next; } } } if (p) r ->next = p; else while(q) { s = (LinkList) malloc (sizeof(LNode)); s ->coef = 0 - q->coef; s ->exp = q ->exp ; s ->next = q ->next ; s->next = r->next; q = q -> next; r->next = s; r = r ->next ; } return Lc; } LinkList mul(LinkList La,LinkList Lb) { LinkList s,p ,q,r,L3; p = La ->next; q = Lb ->next ; LinkList L1,L2; L1 = (LinkList) malloc (sizeof (LNode)); L2 = (LinkList) malloc(sizeof(LNode)); L3 = (LinkList) malloc(sizeof(LNode)); r = L1; L1->next = NULL; L2 ->next = NULL; while (p ) { while(q) { s = (LinkList) malloc(sizeof (LNode)); s ->coef = p ->coef * q ->coef; s->exp = p->exp + q -> exp; s ->next = r ->next; r ->next = s; q = q ->next; r = r ->next; } L3 = AddPolyn(L2,L1); L2 = L3; q = Lb->next ; L1 ->next = NULL; r = L1; p = p ->next ; } return L2; } void main() { LinkList head1,head2,head3,L1,L2; cout<<"-----创建两个一元多项式,并实现它们的相加-----\n"<<endl; head1=polycreate(); cout<<"多项式为:"<<endl<<"y="; printPolylist(head1); cout<<endl; head2=polycreate(); cout<<"多项式为:"<<endl<<"y="; printPolylist(head2); cout<<endl; cout<<"相加后多项式为:"<<endl<<"y="; L1=AddPolyn( head1,head2); printPolylist(L1); cout<<endl; L2 = DecPolyn(head1,head2); cout<<"相减后的多项式为:"<<endl<<"y="; printPolylist(L2); cout<<endl; cout<<"相乘后的多项式为:"<<endl<<"y="; head3 = mul(head1,head2); printPolylist(head3); cout<<endl<<endl;; }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...