栈和队列的相关函数:
栈:https://blog.csdn.net/weixin_41892460/article/details/82973851
队列:https://blog.csdn.net/weixin_41892460/article/details/82973881
QueueByTwoStack.h
#ifndef __QUEUEBYTS_H__
#define __QUEUEBYTS_H__
#include "Queue.h"
#include "Stack.h"
typedef struct QueueByTwoStack
{
Stack s1;
Stack s2;
}QueueByTwoStack;
void QueueByTwoStackInit(QueueByTwoStack* qts);
void QueueByTwoStackDestory(QueueByTwoStack* qts);
void QueueByTwoStackPush(QueueByTwoStack* qts, DataType x);
void QueueByTwoStackPop(QueueByTwoStack* qts);
DataType QueueByTwoStackFront(QueueByTwoStack* qts);
int QueueByTwoStackSize(QueueByTwoStack* qts);
int QueueByTwoStackEmpty(QueueByTwoStack* qts);
void TestQueueByTwoStack();
#endif
QueueByTwoStack.c
#include "QueueByTS.h"
void QueueByTwoStackInit(QueueByTwoStack* qts)
{
assert(qts);
StackInit(&qts->s1);
StackInit(&qts->s2);
}
void QueueByTwoStackDestory(QueueByTwoStack* qts)
{
assert(qts);
StackDestory(&qts->s1);
StackDestory(&qts->s2);
}
int QueueByTwoStackSize(QueueByTwoStack* qts)
{
assert(qts);
return StackSize(&qts->s1) + StackSize(&qts->s2);
}
int QueueByTwoStackEmpty(QueueByTwoStack* qts)
{
assert(qts);
return StackEmpty(&qts->s1) || StackEmpty(&qts->s2);
}
void QueueByTwoStackPush(QueueByTwoStack* qts, DataType x)
{
assert(qts);
StackPush(&qts->s1, x);
}
//如果s2有数据直接出
//如果s2没有数据,则将s1的数据倒过来
void QueueByTwoStackPop(QueueByTwoStack* qts)
{
assert(&qts);
if (StackEmpty(&qts->s2) == 0)
{
while (StackEmpty(&qts->s1))
{
StackPush(&qts->s2, StackTop(&qts->s1));
StackPop(&qts->s1);
}
}
StackPop(&qts->s2);
}
DataType QueueByTwoStackFront(QueueByTwoStack* qts)
{
assert(qts);
if (StackEmpty(&qts->s2) == 0)
{
while (StackEmpty(&qts->s1))
{
StackPush(&qts->s2, StackTop(&qts->s1));
StackPop(&qts->s1);
}
}
return StackTop(&qts->s2);
}
Test.c
#include "QueueByTS.h"
void TestQueueByTwoStack()
{
QueueByTwoStack qts;
QueueByTwoStackInit(&qts);
QueueByTwoStackPush(&qts, 1);
QueueByTwoStackPush(&qts, 2);
QueueByTwoStackPush(&qts, 3);
/*QueueByTwoStackPop(&qts);*/
//printf("%d\n", QueueByTwoStackSize(&qts));
/*printf("%d\n", QueueByTwoStackEmpty(&qts));*/
while (QueueByTwoStackEmpty(&qts) != 0)
{
printf("%d ", QueueByTwoStackFront(&qts));
QueueByTwoStackPop(&qts);
}
printf("\n");
}
int main()
{
TestQueueByTwoStack();
system("pause");
return 0;
}