c语言用两个栈实现一个队列的功能代码

下面是用两个栈实现队列的 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;
}

这个代码定义了两个栈 stack1stack2,和它们的指针 top1top2。在 enqueue 函数中,如果 stack1 没有满,就把元素添加到 stack1 中。在 dequeue 函数中,如果 stack2 不为空,就从 stack2 中取出元素;否则,就把 stack1 中的元素转移到 stack2 中,然后再取出一个元素。注意,如果两个栈都为空,就表示队列为空。

main 函数中,我们先把元素 102030 添加到队列中,然后取出两个元素,再添加元素 40,最后取出三个元素。输出结果为:

10
20
30
40
Queue is empty.
-1

希望c语言用两个栈实现一个队列的功能代码示例能够帮助到大家!

 
  • 队列功能
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定