用c语言选择顺序存储结构,定义一个空栈队列,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果
时间: 2024-10-06 15:04:42 浏览: 55
在C语言中,我们可以使用两个栈来模拟一个队列,其中一个栈用于入队,另一个用于出队。这种设计称为“双栈队列”或“FIFO with two stacks”。首先定义一个空栈队列结构体和相应的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct Queue {
Stack inStack;
Stack outStack;
} Queue;
// 初始化空队列
void initQueue(Queue* q) {
init(&q->inStack);
q->outStack.top = -1; // 空出栈标记
}
// 入队(相当于push到入栈)
void enqueue(Queue* q, int value) {
push(&q->inStack, value);
}
// 出队(如果出栈为空,将入栈元素逐个转移到出栈)
int dequeue(Queue* q) {
while (!isEmpty(&q->outStack)) {
q->outStack.top--; // 指针向内移动,直到非空
push(&q->outStack, pop(&q->inStack)); // 将元素从入栈移到出栈
}
if (isEmpty(&q->outStack)) {
return -1; // 队列空
} else {
return pop(&q->outStack); // 返回并移除队首元素
}
}
// 查看队头元素(但不删除)
int front(Queue* q) {
return peek(&q->outStack); // 如果出栈非空,返回队头元素
}
// 主程序示例
int main() {
Queue myQueue;
int N, num;
scanf("%d", &N);
initQueue(&myQueue);
for (int i = 0; i < N; ++i) {
scanf("%d", &num);
enqueue(&myQueue, num);
printf("Enqueue %d -> ", num);
if (dequeue(&myQueue) != -1) {
printf("Dequeue: %d\n", dequeue(&myQueue));
} else {
printf("Queue is empty.\n");
}
}
return 0;
}
```
阅读全文