完整C++代码,运用栈设计算法void reverseOdd(SqQueue &sq) ,对参数所给定的队列sq中的整数进行操作,将其中奇数的顺序进行逆置,偶数的顺序维持不变。
时间: 2024-05-22 22:14:42 浏览: 11
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 队列最大长度
typedef struct {
int data[MAXSIZE];
int front; // 队头指针,指向队头元素
int rear; // 队尾指针,指向队尾元素的下一个位置
} SqQueue;
// 初始化队列
void initQueue(SqQueue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(SqQueue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFull(SqQueue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
// 入队
int enQueue(SqQueue *q, int x) {
if (isFull(q)) {
return 0; // 队列已满,入队失败
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
return 1; // 入队成功
}
// 出队
int deQueue(SqQueue *q, int *x) {
if (isEmpty(q)) {
return 0; // 队列为空,出队失败
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return 1; // 出队成功
}
// 反转奇数位置元素
void reverseOdd(SqQueue *q) {
int stack[MAXSIZE], top = -1; // 栈
int x;
while (!isEmpty(q)) {
deQueue(q, &x); // 出队
if (q->front % 2 == 1) { // 判断是否为奇数位置元素
stack[++top] = x; // 入栈
} else { // 非奇数位置元素直接入队
enQueue(q, x);
}
}
while (top >= 0) { // 栈中元素出栈并依次入队
enQueue(q, stack[top--]);
}
}
int main() {
SqQueue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
enQueue(&q, 4);
enQueue(&q, 5);
enQueue(&q, 6);
enQueue(&q, 7);
enQueue(&q, 8);
enQueue(&q, 9);
enQueue(&q, 10);
printf("队列反转前:");
while (!isEmpty(&q)) {
int x;
deQueue(&q, &x);
printf("%d ", x);
}
printf("\n");
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
enQueue(&q, 4);
enQueue(&q, 5);
enQueue(&q, 6);
enQueue(&q, 7);
enQueue(&q, 8);
enQueue(&q, 9);
enQueue(&q, 10);
reverseOdd(&q);
printf("队列反转后:");
while (!isEmpty(&q)) {
int x;
deQueue(&q, &x);
printf("%d ", x);
}
printf("\n");
return 0;
}