用c语言写双栈实现队列功能的算法
时间: 2023-04-01 14:04:23 浏览: 70
可以使用两个栈来实现队列的功能。一个栈用于入队,另一个栈用于出队。具体实现如下:
1. 定义两个栈stack1和stack2,stack1用于入队,stack2用于出队。
2. 入队操作:将元素压入stack1中。
3. 出队操作:如果stack2不为空,则直接弹出stack2的栈顶元素;如果stack2为空,则将stack1中的所有元素依次弹出并压入stack2中,然后再弹出stack2的栈顶元素。
以下是C语言代码实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top1;
int top2;
} Queue;
void initQueue(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 enQueue(Queue *q, int x) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
q->data[++q->top1] = x;
}
int deQueue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
if (q->top2 == -1) {
while (q->top1 != -1) {
q->data[++q->top2] = q->data[q->top1--];
}
}
return q->data[q->top2--];
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
printf("%d\n", deQueue(&q));
printf("%d\n", deQueue(&q));
enQueue(&q, 4);
printf("%d\n", deQueue(&q));
printf("%d\n", deQueue(&q));
printf("%d\n", deQueue(&q));
return ;
}