栈模拟队列
栈的特点:先进后出
队列的特点:先进先出
利用栈和队列的特点进行模拟,如下图所示:
主要思想:使用两个栈,s1为保存每次压入数据的,每次要出数据将存数据的栈出到另外一个栈中,然后进行出栈操作,从而实现栈模拟队列。(注:中途有数据压入,直接压入s1中,当s2的数据出完后在进行数据搬移)
实现
Stack.h文件源码:https://blog.csdn.net/a331683772/article/details/90238944
#pragma once
#include"Stack.h"
typedef struct Queue
{
Stack s1;
Stack s2;
}Queue;
void Queue_Init(Queue* q)
{
assert(q);
StackInit(&q->s1);
StackInit(&q->s2);
}
void Queue_Push(Queue* q, SDataType date)
{
assert(q);
StackPush(&q->s1,date);
}
void Queue_Pop(Queue* q)
{
if (StackEmpty(&q->s2))
{
while (!StackEmpty(&q->s1))
{
StackPush(&q->s2, StackTop(&q->s1));
StackPop(&q->s1);
}
StackPop(&q->s2);
}
else
{
StackPop(&q->s2);
}
}
SDataType Queue_Front(Queue* q)
{
assert(q);
return StackTop(&q->s2);
}
void Queue_Destory(Queue* q)
{
assert(q);
StackDestroy(&q->s1);
StackDestroy(&q->s2);
}
void TestSQ()
{
Queue q;
Queue_Init(&q);
Queue_Push(&q, 1);
Queue_Push(&q, 2);
Queue_Push(&q, 3);
Queue_Push(&q, 4);
Queue_Push(&q, 5);
Queue_Pop(&q);
Queue_Pop(&q);
Queue_Pop(&q);
Queue_Pop(&q);
printf("%d\n", Queue_Front(&q));
Queue_Destory(&q);
}