用循环数组实现队列

来源:互联网 发布:知乎 北上广深 编辑:程序博客网 时间:2024/05/01 14:12

Queue.h

#ifndef _QUEUE_Htypedef struct Queue * PtrQueue;void MakeEmpty(PtrQueue Q);PtrQueue CreateQueue(int maxSize);bool IsEmpty(PtrQueue Q);bool IsFull(PtrQueue Q);void DeleteQueue(PtrQueue Q);void EnQueue(PtrQueue Q, int X);int DeQueue(PtrQueue Q);#endif //_QUEUE_Hstruct Queue{int capacityOfQueue;int sizeOfQueue;int frontOfQueue;int rearOfQueue;int * arrayOfQueue;};

Queue.cpp

#include "StdAfx.h"#include "Queue.h"PtrQueue CreateQueue(int maxSize){PtrQueue Q = NULL;Q = new Queue();if (Q == NULL)throw "Fail to new a queue!";Q->arrayOfQueue = new int[maxSize]();if (Q->arrayOfQueue == NULL)throw "Fail to new array of queue!";Q->capacityOfQueue = maxSize;MakeEmpty(Q);return Q;}void MakeEmpty(PtrQueue Q){Q->sizeOfQueue = 0;Q->frontOfQueue = 0;Q->rearOfQueue = 0;}bool IsEmpty(PtrQueue Q){if (Q->sizeOfQueue == 0)return true;elsereturn false;}bool IsFull(PtrQueue Q){if (Q->sizeOfQueue == Q->capacityOfQueue)return true;elsereturn false;}void DeleteQueue(PtrQueue Q){if (Q){delete[] Q->arrayOfQueue;Q->arrayOfQueue = NULL;delete Q;Q = NULL;}}void EnQueue(PtrQueue Q, int X){if (IsFull(Q))throw "Full queue!";else{Q->rearOfQueue = Q->rearOfQueue % Q->capacityOfQueue;Q->arrayOfQueue[Q->rearOfQueue++] = X;Q->sizeOfQueue++;}}int DeQueue(PtrQueue Q){if (IsEmpty(Q))throw "Empty queue!";else{Q->frontOfQueue = Q->frontOfQueue % Q->capacityOfQueue;Q->sizeOfQueue--;return Q->arrayOfQueue[Q->frontOfQueue++];}}

0 0
原创粉丝点击