下面是用两个栈实现队列的 C 语言代码示例:
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 int stack1[MAX_SIZE]; int stack2[MAX_SIZE]; int top1 = -1; int top2 = -1; void enqueue(int data) { if (top1 == MAX_SIZE - 1) { printf("Queue is full.\n"); return; } stack1[++top1] = data; } int dequeue() { if (top1 == -1 && top2 == -1) { printf("Queue is empty.\n"); return -1; } if (top2 == -1) { while (top1 != -1) { stack2[++top2] = stack1[top1--]; } } int data = stack2[top2--]; return data; } int main() { enqueue(10); enqueue(20); enqueue(30); printf("%d\n", dequeue()); printf("%d\n", dequeue()); enqueue(40); printf("%d\n", dequeue()); printf("%d\n", dequeue()); printf("%d\n", dequeue()); return 0; }
这个代码定义了两个栈 stack1
和 stack2
,和它们的指针 top1
和 top2
。在 enqueue
函数中,如果 stack1
没有满,就把元素添加到 stack1
中。在 dequeue
函数中,如果 stack2
不为空,就从 stack2
中取出元素;否则,就把 stack1
中的元素转移到 stack2
中,然后再取出一个元素。注意,如果两个栈都为空,就表示队列为空。
在 main
函数中,我们先把元素 10
、20
和 30
添加到队列中,然后取出两个元素,再添加元素 40
,最后取出三个元素。输出结果为:
10 20 30 40 Queue is empty. -1
希望c语言用两个栈实现一个队列的功能代码示例能够帮助到大家!
评论