完成用两个栈实现队列的队尾插入和队头删除C语音代码(实现往队列插入并输出:1、2、3)
时间: 2024-10-15 18:08:21 浏览: 26
在C语言中,我们可以利用两个栈来实现队列的功能,这里提供一个简单的示例代码。首先,我们需要创建两个栈stack1和stack2,其中stack1作为输入栈用于入队操作,stack2作为工作栈用于模拟出队操作。当需要从队列头部删除元素时,我们先将stack1中的所有元素弹出并放入stack2;然后,从stack2弹出元素,这就是出队操作的结果。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s-1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 向栈顶添加元素
void push(Stack *s, int val) {
if (is_full(s)) {
printf("Stack overflow!\n");
return;
}
s->top++;
printf("Pushing %d to stack...\n", val);
}
// 从栈顶移除元素
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow!\n");
return -1;
}
s->top--;
return s->top + 1; // 返回元素值,模拟队列首部
}
// 创建两个栈模拟双端队列
void enqueue_dequeue(int arr[], int n) {
Stack stack1, stack2;
init(&stack1);
init(&stack2);
for (int i = 0; i < n; i++) {
push(&stack1, arr[i]);
while (!is_empty(&stack1)) {
push(&stack2, pop(&stack1)); // 出队操作
}
printf("Enqueue: %d\n", pop(&stack2)); // 队头插入
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
enqueue_dequeue(arr, n);
return 0;
}
```
当你运行这个程序时,它会按照顺序打印出1、2、3,表示完成了队列的插入和出队操作。注意,由于栈的特点,实际应用中如果频繁地插入和删除,效率不如直接使用队列数据结构高。
阅读全文