棧實現佇列
阿新 • • 發佈:2018-11-15
結構體定義
首先我們需要引入棧檔案Stack.h
#include "Stack.h"
/*
*兩個棧實現一個佇列
*/
typedef struct Queues
{
Stack stack1;
Stack stack2;
}Queues;
初始化
void QueuesInit(Queues *pQs)
{
StackInit(&(pQs->stack1));
StackInit(&(pQs->stack2));
}
插入元素
void QueuesPush(Queues *pQs,DataType data) { StackPush(&(pQs->stack1),data); }
刪除元素
void QueuesPop(Queues *pQs) { if (StackEmpty(&(pQs->stack2))) { while (!StackEmpty(&(pQs->stack1))) { DataType data = StackTop(&(pQs->stack1)); StackPush(&(pQs->stack2),data); StackPop(&(pQs->stack1)); } } StackPop(&(pQs->stack2)); }
獲取佇列隊首元素
DataType QueuesFront(Queues *pQs) { if (StackEmpty(&(pQs->stack2))) { while ( !StackEmpty(&(pQs->stack1))) { DataType data = StackTop(&(pQs->stack1)); StackPush(&(pQs->stack2),data); StackPop(&(pQs->stack1)); } } return StackTop(&(pQs->stack2)); } void TestQueues() { int i = 0; Queues queues; int arr[] = {1,2,3,4,5,6,7,8,9}; QueuesInit(&queues); for (i=0;i<9;i++) { QueuesPush(&queues,arr[i]); printf("%d ",QueuesFront(&queues)); QueuesPop(&queues); } }