📄 ploynode.cpp
字号:
#include <iostream>
using namespace std;
#include <process.h>
//用单链表存储多项式的结点结构
typedef struct polynode
{
float coef; //多项式的系数
int exp; //指数
struct polynode *next; //指向struct polynode类型的数据
}node;//用node 代替struct polynode
char char_flag;//全局字符,用于退出或返回时判断
node *polya,*polyb;//全局变量,用于一元多项式的存储
////////////////////////////////////////////
//主菜单
void Main_menu()
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" 主菜单 "<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 欢迎使用一元多项式加减程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 请按要求输入以下字符,选取你需要的功能! |"<<endl;
cout<<" | |"<<endl;
cout<<" | a: 输入一元多项式A |"<<endl;
cout<<" | b: 输入一元多项式B |"<<endl;
cout<<" | d: 删除一元多项式 |"<<endl;
cout<<" | s: 两个一元多项式加减操作 |"<<endl;
cout<<" | p: 输出一元多项式 |"<<endl;
cout<<" | q: 退出程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
return;
}
//////////////////////////////////////
//删除菜单
void Delete_Poly_menu()
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" 删除菜单 "<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 请输入以下字符: |"<<endl;
cout<<" | A:删除一元多项式A |"<<endl;
cout<<" | B:删除一元多项式B |"<<endl;
cout<<" | c:取消删除,并返回到主菜单 |"<<endl;
cout<<" | q:退出程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
return;
}
////////////////////////////
//退出菜单
void Quit_menu()
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" 退出 "<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 谢谢使用本程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 欢迎大家来一起研究 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 联系方式: |"<<endl;
cout<<" | E-mail:ycjlhy@163.com |"<<endl;
cout<<" | QQ:22521973 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
return;
}
/////////////////////////
//一元多项式加减菜单
void Add_OR_Sub_menu()
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 欢迎使用一元多项式加减程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 请按要求输入以下字符,选取你需要的功能! |"<<endl;
cout<<" | a:加 |"<<endl;
cout<<" | s:减 |"<<endl;
cout<<" | c:返回到主菜单 |"<<endl;
cout<<" | q:退出程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
return;
}
///////////////////////////////////////
//一元多项式输入子菜单
void cin_Poly_menu(char p)
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" 一元多项式"<<p<<"输入"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | 请输入一元多项式 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 例如: |"<<endl;
cout<<" | 想输入1*x^2,先提示输入1 |"<<endl;
cout<<" | 然后再按提示输入2 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 结束输入: 系数输入0,指数输入0 |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
}
//////////////////////////////////
//一元多项式输入主菜单
void cin_polynode_menu(char p)
{
system("cls");
cout<<endl;
cout<<endl;
cout<<" 一元多项式"<<p<<"输入菜单"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 一元多项式 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 请输入一以下字符: |"<<endl;
cout<<" | b:开始输入一元多项式 |"<<endl;
cout<<" | c:取消输入,并返回主菜单 |"<<endl;
cout<<" | d:删除已经创建的一元多项式 |"<<endl;
cout<<" | p:输出一元多项式 |"<<endl;
cout<<" | q:退出程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
return;
}
///////////////////////////////////
//一元多项式输出菜单
void print_menu()
{ system("cls");
cout<<endl;
cout<<endl;
cout<<" 一元多项式输出菜单"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 一元多项式 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 请输入一以下字符: |"<<endl;
cout<<" | a:输出一元多项式A |"<<endl;
cout<<" | b:输出一元多项式B |"<<endl;
cout<<" | c:取消输入,并返回主菜单 |"<<endl;
cout<<" | q:退出程序 |"<<endl;
cout<<" | |"<<endl;
cout<<" | |"<<endl;
cout<<" | 杨呈杰 版权所有 盗版不究 |"<<endl;
cout<<" +----------------------------------------------+"<<endl;
cout<<endl;
cout<<endl;
cout<<"请输入:"<<endl;
return;
}
///////////////////////////////////////////////////
//一元多项式创建函数,h指针返回头节点位置
node* create()
{
node *h,*r,*s,*q;
int e;
float c=0.0;
h=new node; //建立多项式的头结点,为头结点分配存储空间
h->coef=0.0;
h->exp=-1;
h->next=NULL;
r=h; //r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点
int n=1;
cout<<"第"<<n<<"项系数是:";
cin>>c;
cout<<"第"<<n<<"项指数是:";
cin>>e; //输入指数
while(c!=0.0 || e!=0) //输入系数为0时,表示多项式的输入结束
{
if(c==0.0)
{
cout<<"你输入的系数为0,所以舍掉!"<<endl;
cout<<"请继续输入:"<<endl;
}
else
{
n++;
q=h;
s=new node; //申请新结点
s->coef=c; //申请新结点后赋值
s->exp=e; //申请新结点后赋值
s->next=NULL;
//排序
while(q->next && q->exp < s->exp )
{
r=q;
q=q->next;
}
//如果相等
if(q->exp==s->exp)
{
q->coef+=s->coef;
cout<<"你输入的系数和以前的系数重复,故加在一起"<<endl;
cout<<"请继续输入:"<<endl;
}
else
//中间插入
if(q->next)
{
r->next=s;
s->next=q;
}
else//做尾插,插入新结点
if(q->exp >s->exp)
{
r->next=s;
s->next=q;
}
else
{
q->next=s;
}
}
cout<<"第"<<n<<"项系数是:";
cin>>c; //输入系数
cout<<"第"<<n<<"项指数是:";
cin>>e; //输入指数
}
return(h);//返回头节点
}
///////////////////////////////////////////////////////////////////
//判断指数大小
int cmp(node* pa,node* pb)
{
int t=(pa->exp>pb->exp)?1:((pa->exp<pb->exp)?-1:0);
return t;
}
//////////////////////////////////////////////////////////////////////
//一元多项式相加函数,用于将两个多项式相加,head指针返回头节点的位置
node* polyadd(node *polya, node *polyb)
{
node *head;
head=new node;
char str;
if(!head)
{
cout<<"创建头节点失败"<<endl;
cout<<"请按任意键结束程序!"<<endl;
cin>>str;
char_flag='q';
return head;
}
head->coef=0.0;
head->exp=-1;
head->next=NULL;
node *pa,*pb,*pre;
float sum;
//令pa和pb分别指向polya和polyb多项式链表中的第一个结点
pa=polya->next;
pb=polyb->next;
pre=head; //位置指针,指向和多项式polya
//当两个多项式均未扫描结束时,执行以下操作
while(pa&&pb)
{
switch(cmp(pa,pb))
{
//若pa指向的多项式指数小于pb指的指数
case-1:
pre->next=pa; //将pa结点加入到和多项式中
pre=pre->next;
pa=pa->next;
break;
//若指数相等,则相应的系数相加
case 0:
sum=pa->coef+pb->coef;
if(sum)
{ //系数和不为零
pa->coef=sum;
pre->next=pa;
pre=pre->next;
pa=pa->next;
// temp=pb;
pb=pb->next;
// delete temp;
}
else
{ //如果系数和为零,则删除结点pa与pb,并将指针指向下一个结点
// temp=pa;
pa=pa->next;
// delete temp;
// temp=pb;
pb=pb->next;
// delete temp;
}
break;
//若pa指数大于pb指数
case 1:
pre->next=pb; //p结点不动,将q结点加入到和多项式中
pre=pre->next;
// temp=pb;
pb=pb->next;
// delete temp;
break;
}
}
//多项式polya中还有剩余,则将剩余的结点加入到和多项式中
while(pa)
{
pre->next=pa;
pa=pa->next;
pre=pre->next;
}
//将polyb的结点加入到和多项式中
while(pb)
{
pre->next=pb;
//temp=pb;
pb=pb->next;
pre=pre->next;
//delete temp;
}
return head;
}
///////////////////////////////////////////////////////////////////////
//一元多项式相减函数,用于将两个多项式相减,head指针返回头节点的位置
node* polySub(node *polya, node *polyb)
{
node *head;
head=new node;
char str;
if(!head)
{
cout<<"创建头节点失败"<<endl;
cout<<"请按任意键结束程序!"<<endl;
cin>>str;
char_flag='q';
return head;
}
head->coef=0.0;
head->exp=-1;
head->next=NULL;
node *pa,*pb,*pre;
float sum;
//令pa和pb分别指向polya和polyb多项式链表中的第一个结点
pa=polya->next;
pb=polyb->next;
pre=head; //位置指针,指向和多项式h
//当两个多项式均未扫描结束时,执行以下操作
while(pa&&pb)
{
switch(cmp(pa,pb))
{
//若pa指向的多项式指数小于pb指的指数
case-1:
pre->next=pa; //将pb结点加入到和多项式中
pre=pre->next;
pa=pa->next;
break;
//若指数相等,则相应的系数相加
case 0:
sum=pa->coef-pb->coef;
if(sum)
{ //系数和不为零
pa->coef=sum;
pre->next=pa;
pre=pre->next;
pa=pa->next;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -