📄 1.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct slnode
{
int data;
int ext;
struct slnode *next;
}node;
void head(node **h)
{ (*h)=(node*)malloc(sizeof(node));
(*h)->next=NULL;
(*h)->data=0;
}
void display(node *p)
{
node *q;
int i,j;
q=p->next;
i=p->data;
printf("%d ",i);
while(q!=NULL)
{
i=q->data;
j=q->ext;
printf("%d,%d ",i,j);
q=q->next;
}
printf("\n");
}
int insert(node **h,int c,int e)
{
node *p;
int i=1;
p=*h;
if(c!=0)
{
node *s;
s=(node*)malloc(sizeof(node));
s->data=c;
s->ext=e;
while((p->next!=NULL)&&i)
if(p->next->ext==e)
{
p->next->data=p->next->data+c;
free(s);
return 1;
}
else if(p->next->ext<e)
p=p->next;
else i=0;
s->next=p->next;
p->next=s;
}
return 0;
}
node *sum(node *pa,node *pb)
{
node *p,*q,*t,*r,*h;
int i=0,j;
t=pa;
p=pa->next;
q=pb->next;
while((p!=NULL)&&(q!=NULL))
{
j=0;
if(p->ext<q->ext)
{
t->next=p;
p=p->next;
}
else if(p->ext==q->ext)
{
i++;
p->data=p->data+q->data;
if(p->data!=0)
{
t->next=p;
p=p->next;
r=q;
q=q->next;
free(r);
}
else
{
i++;
r=p;
h=q;
p=p->next;
q=q->next;
free(r);
free(h);
j=1;
}
}
else
{
t->next=q;
q=q->next;
}
if(!j)
t=t->next;
}
if(p!=NULL)
t->next=p;
else
t->next=q;
pa->data=pa->data+pb->data-i;
return (pa);
}
node *tend(node *pa,node *q)
{
node *h,*p;
int i,j;
head(&h);
h->data=pa->data;
p=pa->next;
while(p!=NULL)
{
i=(p->data)*(q->data);
j=p->ext+q->ext;
insert(&h,i,j);
p=p->next;
}
return h;
}
node *sub(node *pa,node *pb)
{
node *p,*q,*t,*r,*h;
int i=0,j;
t=pa;
p=pa->next;
q=pb->next;
while((p!=NULL)&&(q!=NULL))
{
j=0;
if(p->ext<q->ext)
{
t->next=p;
p=p->next;
}
else if(p->ext==q->ext)
{
i++;
p->data=p->data-q->data;
if(p->data!=0)
{
t->next=p;
p=p->next;
r=q;
q=q->next;
free(r);
}
else
{
i++;
r=p;
h=q;
p=p->next;
q=q->next;
free(r);
free(h);
j=1;
}
}
else
{
t->next=q;
q->data=0-q->data;
q=q->next;
}
if(!j)
t=t->next;
}
if(p!=NULL)
t->next=p;
else
{
t->next=q;
while(q!=NULL)
{
q->data=0-q->data;
q=q->next;
}
}
pa->data=pa->data+pb->data-i;
return (pa);
}
node *mul(node *pa,node *pb)
{
node *p,*t,*q;
head(&t);
p=pb->next;
while(p!=NULL)
{
q=tend(pa,p);
sum(t,q);
p=p->next;
}
return t;
}
void cread(node **p)
{
int i,j,k,r=0,n;
printf("请输入你要的数的数目:\n");
scanf("%d",&n);
while((n<0)||(n>10))
{
printf("请重输:\n");
scanf("%d",&n);
}
printf("请输入%d个数:\n",n);
for(i=0;i<n;i++)
{
scanf("%d,%d",&j,&k);
if(j==0)
{
printf("输入的数无效,请重输:\n");
i--;
}
else
r=r+insert(p,j,k);
}
(*p)->data=n-r;
}
void main()
{
node *p,*q,*r;
int j=1,k,l;
head(&p);
head(&q);
printf("请输入多项式S1\n");
cread(&p);
printf("多项式S1的数:\n");
display(p);
printf("请输入多项式S2\n");
cread(&q);
printf("多项式S2的数:\n");
display(q);
do
{
printf("请选择运算符:\n");
printf("加 [1],减 [2],乘 [3]\n");
scanf("%d",&k);
switch(k)
{
case 1: r=sum(p,q); l=0; break;
case 2: r=sub(p,q); l=0; break;
case 3: r=mul(p,q); l=0; break;
default: l=1; break;
}
}while(l);
printf("运算后的结果:\n");
display(r);
//getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -