C语言用二个栈实现一个队列
时间: 2024-10-09 14:10:29 浏览: 45
在C语言中,通常队列是一种先进先出(FIFO)的数据结构,而两个栈可以共同实现这种结构,这种方法叫做“双栈队列”(Double Stack Queue)。下面是基本思路:
1. 创建两个栈stack1和stack2。
2. 当入队操作(Enqueue)发生时,将元素直接压入stack1。
3. 出队操作(Dequeue)时,有两种情况:
- 如果stack2为空,从stack1弹出元素,然后依次将这些元素转移至stack2。这样每次出队就相当于从stack2移除顶部元素,实现了队列的效果。
- 如果stack2非空,则直接从stack2移除顶部元素。
以下是简单的代码实现:
```c
typedef struct Node {
void* data; // 数据部分
} Node;
Node stack1[STACK_SIZE], stack2[STACK_SIZE]; // 两个栈
int top1 = -1, top2 = -1; // 栈顶指针
size_t size = 0;
void enqueue(Node item) {
stack1[++top1] = item;
}
Node dequeue() {
if (top2 == -1) { // 如果stack2为空,需要将stack1的元素转移到stack2
while (top1 != -1) {
stack2[++top2] = stack1[top1--]; // 先复制到stack2
}
}
if (top2 != -1) { // 如果stack2有元素,直接出队
Node result = stack2[top2--];
// ...其他处理...
return result;
} else {
// 没有元素,报错或返回特殊值
printf("Queue is empty.\n");
return NULL;
}
}
```
阅读全文