C语言用循环队列实现多项式求和全代码
时间: 2023-07-24 10:05:34 浏览: 53
下面是用循环队列实现多项式求和的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 队列的最大长度
typedef struct {
double coef; // 系数
int expn; // 指数
} ElemType;
typedef struct {
ElemType data[MAXSIZE];
int front; // 头指针
int rear; // 尾指针
} Queue;
void InitQueue(Queue *Q) {
Q->front = Q->rear = 0;
}
int QueueEmpty(Queue *Q) {
return Q->front == Q->rear;
}
int QueueFull(Queue *Q) {
return (Q->rear + 1) % MAXSIZE == Q->front;
}
int EnQueue(Queue *Q, ElemType e) {
if (QueueFull(Q))
return 0;
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
int DeQueue(Queue *Q, ElemType *e) {
if (QueueEmpty(Q))
return 0;
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
void CreatePoly(Queue *Q) {
ElemType e;
int n;
printf("请输入多项式的项数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第 %d 项的系数和指数:", i + 1);
scanf("%lf%d", &e.coef, &e.expn);
EnQueue(Q, e);
}
}
void PrintPoly(Queue *Q) {
ElemType e;
while (!QueueEmpty(Q)) {
DeQueue(Q, &e);
if (e.coef > 0)
printf("+");
printf("%.2fx^%d", e.coef, e.expn);
}
printf("\n");
}
void PolyAdd(Queue *Q1, Queue *Q2, Queue *Q3) {
ElemType e1, e2, e3;
while (!QueueEmpty(Q1) && !QueueEmpty(Q2)) {
DeQueue(Q1, &e1);
DeQueue(Q2, &e2);
if (e1.expn == e2.expn) { // 指数相等,系数相加
e3.coef = e1.coef + e2.coef;
e3.expn = e1.expn;
EnQueue(Q3, e3);
} else if (e1.expn < e2.expn) { // Q1 指数小,先进入队列 Q3
EnQueue(Q3, e1);
EnQueue(Q2, e2);
} else { // Q2 指数小,先进入队列 Q3
EnQueue(Q3, e2);
EnQueue(Q1, e1);
}
}
while (!QueueEmpty(Q1)) // 将 Q1 中剩余的元素加到 Q3 中
DeQueue(Q1, &e1), EnQueue(Q3, e1);
while (!QueueEmpty(Q2)) // 将 Q2 中剩余的元素加到 Q3 中
DeQueue(Q2, &e2), EnQueue(Q3, e2);
}
int main() {
Queue Q1, Q2, Q3;
InitQueue(&Q1);
InitQueue(&Q2);
InitQueue(&Q3);
printf("请输入第一个多项式:\n");
CreatePoly(&Q1);
printf("请输入第二个多项式:\n");
CreatePoly(&Q2);
PolyAdd(&Q1, &Q2, &Q3);
printf("多项式相加的结果为:\n");
PrintPoly(&Q3);
return 0;
}
```