#include<iostream>
using namespace std;
typedef struct NODE{
int num;//系数
int index;//次数
NODE* next;
NODE(int n,int i){num=n,index=i,next=NULL;} //构造函数
}node,*pnode;
class Poly
{
public:
pnode head,tail;
Poly(){//构造函数
head=tail=new node(0,0);
}
void init();
void insert(int,int);
void insert2end(int,int);
Poly add_and_minus(const Poly&,int);
void output();
void destroy();
friend Poly operator+(const Poly&,const Poly&);
friend Poly operator-(const Poly&,const Poly&);
friend ostream& operator<<(ostream&,Poly);
friend istream& operator>>(istream&,Poly&);
};
void Poly::init(){//初始化
cout<<"请输入多项式项数:"<<endl;
int n;cin>>n;
cout<<"请输入多项式的系数和次数比如 45*x^3 请输入45 3:"<<endl;
int num,index;
for(int i=1;i<=n;i++){
cin>>num>>index;
if(num)
insert(num,index);}
cout<<"下面是你输入的一元多项式:"<<endl;
output();
}
void Poly::insert(int num,int index){//顺序插入
pnode newone=new node(num,index);
pnode p=head;
while(p->next){
if(p->next->index>index){
newone->next=p->next;
p->next=newone;break;}
p=p->next;
}
if(!p->next){
p->next=newone;
tail=newone;}
}
void Poly::insert2end(int num,int index){//尾插法
pnode newone=new node(num,index);
tail->next=newone;
tail=newone;
}
void Poly::output(){//输出
pnode p=head->next;
if(!p){cout<<0<<endl;return;}
while(p){
if(p->index){
if(p->num!=1&&p->num!=-1){
if(p!=head->next)
cout<<(p->num>0?p->num:-p->num)<<" * ";
else cout<<p->num<<" * ";
}
cout<<"x";
if(p->index!=1)
cout<<"^"<<p->index;
}
else cout<<p->num;
p=p->next;
if(p)
if(p->num>0)cout<<" + ";
else cout<<" - ";
}
cout<<endl;
}
Poly Poly::add_and_minus(const Poly& a,int st){//相加想减合成一个函数 st为1相加 为-1相减
pnode p=head->next;
pnode pa=a.head->next;
Poly c;int num,index;
while(p&&pa){//归并排序
if(p->index<pa->index)
num=p->num,index=p->index,p=p->next;
else if(p->index>pa->index)
num=st*pa->num,index=pa->index,pa=pa->next;
else
num=p->num+st*pa->num,index=p->index,p=p->next,pa=pa->next;
if(num)c.insert2end(num,index);
}
while(p)
c.insert2end(p->num,p->index),p=p->next;
while(pa)
c.insert2end(st*pa->num,pa->index),pa=pa->next;
return c;
}
void Poly::destroy(){//析构函数
pnode p=head;
while(p->next){
pnode pp=p->next;
p->next=pp->next;
delete pp;
}
delete head;
head=tail=NULL;
}
Poly operator+(Poly& a, Poly& b){//重载加法
return a.add_and_minus(b,1);
}
Poly operator-(Poly& a,Poly& b){//重载减法
return a.add_and_minus(b,-1);
}
ostream& operator<<(ostream& out,Poly a){//重载输出
a.output();
return out;
}
istream& operator>>(istream& in,Poly& a){//重载输入
a.init();
return in;
}
void add(){
Poly a,b;
cin>>a>>b;
cout<<"相加结果:"<<endl;
cout<<a+b<<endl;
}
void mus(){
Poly a,b;
cin>>a>>b;
cout<<"相减结果:"<<endl;
cout<<a-b<<endl;
}
void solve(){
char ch='y';
while(ch=='y'||ch=='Y'){
cout<<"***************************************"<<endl
<<"* 一元多项式加减法 *"<<endl
<<"***************************************"<<endl<<endl
<<"1 加法"<<endl
<<"2 减法"<<endl;
int n;cin>>n;
switch(n){
case 1:add();break;
case 2:mus();break;
default:cout<<"输入错误!"<<endl;break;
}
cout<<"继续?(y/n)"<<endl;
cin>>ch;
}
}
int main()
{
solve();
}
温馨提示:内容为网友见解,仅供参考
用c++编写程序,求两线性表的交集,并集,差集。
b;int c,d;cout<<"请输入第一个闭区间的a,b"<<endl;cin>>a>>b;cout<<"请输入第二个闭区间的c,d"<<endl;cin>>c>>d;if(a>b||c>d) {cout<<"输入的区间不合法"<<endl;}else{if(d<a){cout<<"交集为:空集"<<endl;
C++线性表,分不多。进来帮帮忙。
printf("请输入待建立的表长");scanf("%d",&L->length);getchar();printf("请输入%d个元素用空格分开,",L->length);for(i=0;i<L->length;i++){ scanf("%c",&L->data[i]);} getchar();printf("\\n成功建立表!按任意键继续!\\n");} int length_List(SqList L){ return L.l...
用C++建立一个线性表,输入10个数,并按从小到大显示出来
L.listsize=LIST_INIT_SIZE;\/* 初始存储容量*\/ return OK;} Status ListInsert_Sq(SqList &L,int i,ElemType e) \/* 算法2. 4 *\/ { \/* 初始条件:顺序线性表L 已存在,1≤i≤ListLength(L)+1 *\/ \/* 操作结果:在L 中第i 个位置之前插入新的数据元素e,L 的长度加1 *\/ ElemType...
如何建立一个线性表,用c++的基本语法是什么?
用c++建立一个线性表有以下5步:1、准备数据:定义了顺序表的最大长度MAXLEN、顺序表数据元素的类型DATA以及顺序表的数据结构SLType。在数据结构SLType中,Listen为顺序表已存结点的数量,也就是当前顺序表的长度,ListData是一个结构数组,用来存放各个数据结点。我们认为该顺序表是一个班级学生的记录。...
怎样C++实现线性表的建立、插入、删除、倒序?
cout<<" 创建第二个顺序表"<<endl; CreateList(&L2); Sort1List(&L1); \/\/对第一个顺序表进行直接插入排序 PrintList(L1); Sort2List(&L2); \/\/对第二个顺序表进行折半排序 PrintList(L2); MergeList(L1,L2,&L3); PrintList(L3); break; case 'r': cout<<" 创建第一个顺序表"<<endl; Create...
用C语言实现线性表的顺序存储(创建,插入,删除和查找)
ptemp=head->next;\/\/ptemp指向未排好序的第一个结点 head->next=ptemp->next;\/\/ ptemp->next=p1;\/\/ptemp也排好序了,ptemp变成排好序的第一个结点了 p1=ptemp;\/\/再次让p1成为第一个排好序的结点 } return p1;\/\/头结点为第一个结点}void create_menu()\/\/功能:输出功能菜单,提供人-机接口{ char men...
用c++实现线性表在顺序存储上的删除,判空,表置空操作
删除元素:bool deleteElement(index){ if(index>0&&index<Maxsize){ deleted ary[index];return ture;} else return false;} 判空:bool isEmpty(){ if(ary[0] == null)return true;else return false;} 表置空:bool clear() { if(ary[0] == 0)return true;else for(int i = 0;...
我用c++实现一个线性顺序表,用的是void类型,没有返回值,用if后,return...
函数前面加void就是没有返回值的意思,如果加了void,函数中就不必出现return语句。如果函数中有“return;”语句,执行到这里,会跳出函数。注意是“return;”,不是“return()”。加分号就行了,不要加括号。
【100分】数据结构——使用C语言(线性表)
define OVERFLOW 1 define OK 1 using namespace std;\/\/c++的一个指令 typedef struct { int *elem; \/\/存储空间基址 int length; \/\/当前长度 int listsize;\/\/当前分配的存储容量 \/\/ (以sizeof(ElemType)为单位)\/\/int *next;}sqlist;void initList(sqlist &La){\/\/构造一个空线性表L ...
C++单链线性表的初始化问题
L->next=p; \/\/ █ 代表节点 <--- 代表指针 你那个程序指针是这样指的 █ <-- █ <-- █ <--- █for循环一结束就指向最后面的节点了 这样L是往后移动的, 所以输出时倒着输出 L-next存储p上次创建的节点的地址 p是后来创建的节点 所以后面节点总是指向前面的节点 ...