用循环队列实现多项式求和全代码
时间: 2023-07-24 22:05:34 浏览: 122
循环队列的实现
以下是使用循环队列实现多项式求和的完整代码,注释已加入:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100; // 多项式最大项数
const int MAXQ = 100; // 队列最大容量
struct Term {
int coef; // 系数
int exp; // 指数
};
struct Queue {
Term data[MAXQ]; // 队列元素数组
int front, rear; // 队头队尾指针
};
void InitQueue(Queue &q) { // 初始化队列
q.front = q.rear = 0;
}
bool QueueEmpty(Queue q) { // 判断队列是否为空
return q.front == q.rear;
}
bool EnQueue(Queue &q, Term t) { // 入队操作
if ((q.rear + 1) % MAXQ == q.front) { // 队列已满
return false;
}
q.data[q.rear] = t; // 将元素插入队尾
q.rear = (q.rear + 1) % MAXQ; // 队尾指针加 1
return true;
}
bool DeQueue(Queue &q, Term &t) { // 出队操作
if (q.front == q.rear) { // 队列为空
return false;
}
t = q.data[q.front]; // 取出队头元素
q.front = (q.front + 1) % MAXQ; // 队头指针加 1
return true;
}
void InitPoly(Queue &q) { // 初始化多项式
int n;
cout << "请输入多项式的项数:" << endl;
cin >> n;
for (int i = 0; i < n; i++) {
Term t;
cout << "请输入第 " << i+1 << " 项的系数和指数:" << endl;
cin >> t.coef >> t.exp;
EnQueue(q, t); // 将项入队
}
}
void AddPoly(Queue &q1, Queue &q2, Queue &q3) { // 多项式相加
Term t1, t2, t3;
while (!QueueEmpty(q1) && !QueueEmpty(q2)) { // 当两个队列均不为空时
DeQueue(q1, t1);
DeQueue(q2, t2);
if (t1.exp == t2.exp) { // 指数相同的项系数相加
t3.coef = t1.coef + t2.coef;
t3.exp = t1.exp;
EnQueue(q3, t3); // 将结果入队
} else if (t1.exp > t2.exp) { // 指数较大的项先入队
EnQueue(q3, t1);
EnQueue(q2, t2); // 将队列 2 的项放回队列
} else {
EnQueue(q3, t2);
EnQueue(q1, t1); // 将队列 1 的项放回队列
}
}
while (!QueueEmpty(q1)) { // 将队列 1 剩余的项入队
DeQueue(q1, t1);
EnQueue(q3, t1);
}
while (!QueueEmpty(q2)) { // 将队列 2 剩余的项入队
DeQueue(q2, t2);
EnQueue(q3, t2);
}
}
void PrintPoly(Queue q) { // 输出多项式
Term t;
bool flag = false; // 控制输出格式
while (!QueueEmpty(q)) {
DeQueue(q, t);
if (t.coef != 0) { // 系数为 0 的项不输出
if (flag) {
if (t.coef > 0) {
cout << "+";
}
} else {
flag = true;
}
cout << t.coef;
if (t.exp > 1) {
cout << "x^" << t.exp;
} else if (t.exp == 1) {
cout << "x";
}
}
}
if (!flag) { // 多项式为 0
cout << "0";
}
cout << endl;
}
int main() {
Queue q1, q2, q3;
InitQueue(q1);
InitQueue(q2);
InitQueue(q3);
cout << "请输入第一个多项式:" << endl;
InitPoly(q1);
cout << "请输入第二个多项式:" << endl;
InitPoly(q2);
AddPoly(q1, q2, q3);
cout << "结果为:" << endl;
PrintPoly(q3);
return 0;
}
```
阅读全文