用c语言写两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。
时间: 2024-05-30 14:14:25 浏览: 168
好的,这是一个关于数据结构的问题,可以回答。要实现队列,我们可以使用两个栈,一个栈用来入队,另一个栈用来出队。入队时,将元素压入第一个栈,出队时,如果第二个栈不为空,则直接弹出栈顶元素,否则,将第一个栈中的元素逐个弹出并压入第二个栈,再弹出栈顶元素。这样就可以实现队列的 Push 和 Pop 操作了。
相关问题
用c语言写两个栈来实现一个队列,完成队列的 Push 和 Pop 操作,队列中的元素为 int 类型,代码是什么
以下是用 C 语言实现队列的代码,使用两个栈来模拟队列的 Push 和 Pop 操作:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top1;
int top2;
} Queue;
void init(Queue *q) {
q->top1 = -1;
q->top2 = -1;
}
int isEmpty(Queue *q) {
return q->top1 == -1 && q->top2 == -1;
}
int isFull(Queue *q) {
return q->top1 == MAXSIZE - 1 && q->top2 == MAXSIZE - 1;
}
void push(Queue *q, int value) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
if (q->top1 == -1) {
q->data[++q->top1] = value;
} else {
while (q->top1 != -1) {
q->data[++q->top2] = q->data[q->top1--];
}
q->data[++q->top1] = value;
while (q->top2 != -1) {
q->data[++q->top1] = q->data[q->top2--];
}
}
}
int pop(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
return q->data[q->top1--];
}
int main() {
Queue q;
init(&q);
push(&q, 1);
push(&q, 2);
push(&q, 3);
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
printf("%d\n", pop(&q));
return 0;
}
```
注意:以上代码未经过完全测试,仅供参考。
用C语言写一个程序:两个栈实现一个队列
以下是用C语言实现两个栈实现一个队列的程序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct stack {
int top;
int capacity;
int* array;
} Stack;
typedef struct queue {
Stack* stack1;
Stack* stack2;
} Queue;
Stack* createStack(int capacity) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->capacity = capacity;
stack->top = -1;
stack->array = (int*)malloc(stack->capacity * sizeof(int));
return stack;
}
int isStackEmpty(Stack* stack) {
return stack->top == -1;
}
int isStackFull(Stack* stack) {
return stack->top == stack->capacity - 1;
}
void push(Stack* stack, int item) {
if (isStackFull(stack)) {
printf("Stack is full.\n");
return;
}
stack->array[++stack->top] = item;
}
int pop(Stack* stack) {
if (isStackEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
return stack->array[stack->top--];
}
void enqueue(Queue* queue, int item) {
push(queue->stack1, item);
}
int dequeue(Queue* queue) {
if (isStackEmpty(queue->stack1) && isStackEmpty(queue->stack2)) {
printf("Queue is empty.\n");
return -1;
}
if (isStackEmpty(queue->stack2)) {
while (!isStackEmpty(queue->stack1)) {
int item = pop(queue->stack1);
push(queue->stack2, item);
}
}
return pop(queue->stack2);
}
int main() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->stack1 = createStack(100);
queue->stack2 = createStack(100);
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
printf("%d dequeued from queue.\n", dequeue(queue));
printf("%d dequeued from queue.\n", dequeue(queue));
printf("%d dequeued from queue.\n", dequeue(queue));
free(queue->stack1->array);
free(queue->stack1);
free(queue->stack2->array);
free(queue->stack2);
free(queue);
return 0;
}
```
阅读全文