c语言队列多项式相乘

从控制台分别输入两个关于x的多项式,其中各项系数均为整数,输入时乘号不可忽略,乘方以“^”表示,x的指数按降序排列。各操作数、运算符之间用空格分隔。输出两个多项式相乘的结果,其中x的指数按降序排列。要求:使用队列的顺序存储实现。

稍等,初始化队列,入队这些就不用说明了,一个大一的孩子都知道:

img

#include <stdio.h>
#include <stdlib.h>

#define MAX_TERMS 100
#define MAX(a, b) ((a) > (b) ? (a) : (b))

typedef struct {
  int coef;
  int expon;
} term;

typedef struct {
  term terms[MAX_TERMS];
  int front;
  int rear;
} queue;

void init_queue(queue *q) {
  q->front = 0;
  q->rear = 0;
}

int is_empty(queue *q) {
  return q->front == q->rear;
}

int is_full(queue *q) {
  return q->rear == MAX_TERMS - 1;
}

void enqueue(queue *q, term t) {
  if (is_full(q)) {
    printf("队列已满\n");
    exit(1);
  }
  q->terms[q->rear] = t;
  q->rear++;
}

term dequeue(queue *q) {
  if (is_empty(q)) {
    printf("队列为空\n");
    exit(1);
  }
  term t = q->terms[q->front];
  q->front++;
  return t;
}

void read_polynomial(queue *q) {
  int coef, expon;
  char ch;
  do {
    scanf("%d%c%d", &coef, &ch, &expon);
    term t;
    t.coef = coef;
    t.expon = expon;
    enqueue(q, t);
  } while (ch != '\n');
}

term multiply_terms(term t1, term t2) {
  term result;
  result.coef = t1.coef * t2.coef;
  result.expon = t1.expon + t2.expon;
  return result;
}

void multiply_polynomials(queue *q1, queue *q2, queue *result) {
  int i, j;
  init_queue(result);
  while (!is_empty(q1)) {
    term t1 = dequeue(q1);
    queue temp;
    init_queue(&temp);
    while (!is_empty(q2)) {
      term t2 = dequeue(q2);
      term t = multiply_terms(t1, t2);
      enqueue(&temp, t);
    }
    while (!is_empty(&temp)) {
      term t = dequeue(&temp);
      enqueue(result, t);
    }
    init_queue(&temp);
    q2->front = 0;  
    q2->rear = 0;  
  }
}

void sort_polynomial(queue *q) {
  int i, j, n;
  term temp;
  n = q->rear - q->front;
  for (i = q->front; i < q->rear - 1; i++) {
    for (j = i + 1; j < q->rear; j++) {
      if (q->terms[i].expon < q->terms[j].expon) {
        temp = q->terms[i];
        q->terms[i] = q->terms[j];
        q->terms[j] = temp;
      }
    }
  }
}

void print_polynomial(queue *q) {
  int i;
  for (i = q->front; i < q->rear; i++) {
    printf("%dx^%d ", q->terms[i].coef, q->terms[i].expon);
    if (i < q->rear - 1) {
      printf("+ ");
    }
  }
  printf("\n");
}

int main() {
  queue q1, q2, result;
  init_queue(&q1);
  init_queue(&q2);
  init_queue(&result);
  printf("输入第一个多项式:");
  read_polynomial(&q1);
  printf("输入第二个多项式:");
  read_polynomial(&q2);
  multiply_polynomials(&q1, &q2, &result);
  sort_polynomial(&result);
  printf("两个多项式的积为:");
  print_polynomial(&result);
  return 0;
}