#include<stdio.h>
#include<stdlib.h>
struct Data
{
double ratio;
int index;
};
struct Node
{
Data data;
Node* next;
};
Node* head1 = NULL;
Node* head2 = NULL;
Node* headsum = NULL;
struct QNode
{
Node* front;
Node* rear;
};
void in_quene(QNode* quene, Data data);
Data* out_quene(QNode* quene);
QNode* sumPol(QNode* polmax, QNode* polmin);
Data* rear_quene(QNode* quene);
bool isEmpty(QNode* quene);
int main()
{
QNode* pol1 = (QNode*)malloc(sizeof(QNode));
pol1->front = head1;
pol1->rear = head1;
QNode* pol2 = (QNode*)malloc(sizeof(QNode));
pol2->front = head2;
pol2->rear = head2;
int n;
fclose(fopen("in.txt", "a"));
freopen("in.txt", "r", stdin);
printf("请按照指数从大到小依次输入第一个多项式的系数和指数(如果是0可以不用输入),输入-1 -1结束\n如: 5 3\n");
for (;;)
{
Data temp;
scanf("%lf %d", &temp.ratio, &temp.index);
if (temp.index == -1 && temp.ratio == -1)
{
break;
}
in_quene(pol1,temp);
if (temp.index);
}
printf("请按照指数从大到小依次输入第二个多项式的系数和指数(如果是0可以不用输入),输入-1 -1 结束\n如: 5 3\n");
for (;;)
{
Data temp;
scanf("%lf %d", &temp.ratio, &temp.index);
if (temp.index == -1 && temp.ratio == -1)
{
break;
}
in_quene(pol2, temp);
}
QNode* polsum = sumPol(pol1, pol2);
}
void in_quene(QNode* quene,Data data)
{
if (quene->rear)
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;
quene->rear->next = temp;
quene->rear = temp;
}
else
{
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;
quene->front = temp;
quene->rear = temp;
}
}
Data* out_quene(QNode* quene)
{
if (quene->front==NULL)
{
printf("队列中没有数据\n");
return NULL;
}
else
{
Node* temp = quene->front;
Data* return_temp = (Data*)malloc(sizeof(Node));
*return_temp = quene->front->data;
quene->front = quene->front->next;
if (quene->front == NULL)
{
quene->rear = NULL;
}
free(temp);
return return_temp;
}
}
Data* rear_quene(QNode* quene)
{
if (quene->front == NULL)
{
printf("队列中没有数据\n");
return NULL;
}
else
{
Data* return_temp = (Data*)malloc(sizeof(Node));
*return_temp = quene->front->data;
return return_temp;
}
}
bool isEmpty(QNode* quene)
{
if (quene->front)
{
return 0;
}
else
{
return 1;
}
}
QNode* sumPol(QNode* polmax, QNode* polmin)
{
QNode* polsum = (QNode*)malloc(sizeof(QNode));
polsum->front = headsum;
polsum->rear = headsum;
while (! (isEmpty(polmax) && isEmpty(polmin)) )
{
if (isEmpty(polmax) == 0 && isEmpty(polmin) == 0)
{
if (rear_quene(polmax)->index > rear_quene(polmin)->index)
{
Data temp = *out_quene(polmax);
in_quene(polsum, temp);
}
else if (rear_quene(polmax)->index == rear_quene(polmin)->index)
{
Data temp1 = *out_quene(polmax);
Data temp2 = *out_quene(polmin);
Data temp;
temp.ratio = temp1.ratio + temp2.ratio;
temp.index = temp1.index;
in_quene(polsum, temp);
}
else
{
Data temp = *out_quene(polmin);
in_quene(polsum, temp);
}
}
else if (isEmpty(polmax) == 0 && isEmpty(polmin) == 1)
{
Data temp = *out_quene(polmax);
in_quene(polsum, temp);
}
else if (isEmpty(polmax) == 1 && isEmpty(polmin) == 0)
{
Data temp = *out_quene(polmin);
in_quene(polsum, temp);
}
}
return polsum;
}