使用两个链栈模拟队列操作进入队列,从队列输出的操作。c++代码
时间: 2024-03-18 07:17:10 浏览: 19
抱歉,我可以回答这个问题。以下是使用两个链栈模拟队列的 C 代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* next;
} Node;
typedef struct {
Node* head;
Node* tail;
} Queue;
typedef struct {
Node* head;
} Stack;
void push(Stack* stack, int value) {
Node* node = (Node*) malloc(sizeof(Node));
node->value = value;
node->next = stack->head;
stack->head = node;
}
int pop(Stack* stack) {
if (!stack->head) {
printf("Error: stack is empty!\n");
return -1;
}
int value = stack->head->value;
Node* tmp = stack->head;
stack->head = tmp->next;
free(tmp);
return value;
}
void enqueue(Queue* queue, int value) {
push(queue->tail, value);
}
int dequeue(Queue* queue) {
if (!queue->head->next) {
printf("Error: queue is empty!\n");
return -1;
}
while (queue->tail->next) {
push(queue->head, pop(queue->tail));
}
int value = pop(queue->head);
while (queue->head->next) {
push(queue->tail, pop(queue->head));
}
return value;
}
int main() {
Queue* queue = (Queue*) malloc(sizeof(Queue));
queue->head = (Node*) malloc(sizeof(Node));
queue->tail = (Node*) malloc(sizeof(Node));
queue->head->next = queue->tail->next = NULL;
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printf("%d\n", dequeue(queue));
printf("%d\n", dequeue(queue));
printf("%d\n", dequeue(queue));
printf("%d\n", dequeue(queue));
return 0;
}
```
此代码可以实现使用两个链栈模拟队列,并且可以操作进入队列和从队列输出。在此示例代码中,enqueue 函数将元素添加到队列中,dequeue 函数将队头的元素从队列中弹出,并返回该元素的值。