Queuing exercises, single-strand queues, cyclic queues, and various basic operations of queues. #pragma overce # include #include #define maxqsize 10
Template class cqueue {public: CQueue (); ~ cqueue (); // ---------- Single link queue ------- Queue chain storage structure typedef struct _tagqnode {T data; struct _tagqnode * next;} Qnode, * queueptr;
Static struct _tagqueue {queueptr around; // Team head pointer Queueueptr}; // ---------- Cycle queue ------- Queuing STATIC STRUCT _tagsqqueue {t * base; int around; int mark;};
Private: typedef _tagqueue linkqueue, * lqueueueptr; typedef _tagsqqueue sqqueue;
public: // initialize a single-stranded queue bool InitQueue (LinkQueue & q); void DestroyQueue (LinkQueue & q); void ClearQueue (LinkQueue & q); int QueueEmpty (LinkQueue q); int QueueLength (LinkQueue q); T GetHead (LinkQueue q); T getrear (LinkQueue Q); Bool Enqueue (LinkQueue & Q, T E); Bool Dequeue (LinkQueue & q, T & E); // The Bool Queuetraverse (LinkQueue & Q); // Initialization Cycle queue BOOL INITSQQUEUE (Sqqueue & q); void DestroySqQueue (SqQueue & q); void ClearSqQueue (SqQueue & q); int SqQueueEmpty (SqQueue q); int SqQueueLength (SqQueue q); T GetSqQueueHead (SqQueue q); T GetSqQueueRear (SqQueue q); bool EnSqQueue (SqQueue & q, T e ); Bool desqqueue (Sqqueue & Q, T & E); // The Bool Sqqueuetraverse (Sqqueue & Q) remains to complete.
Template CQUEUE :: CQueue () {} template CQUEUE :: ~ cqueue () {} template Bool CQueue :: initqueue (linkqueue & q) {Q.front = q.rear = new qNode; if (q.front == null) Return False; q.front-> next = null; return true;} template Bool CQueue :: initsqqueue (SQQueue & q) {q.base = new t [MAXQSIZE]; if (q.base == null) Return False; q.front = q.rear = 0; return true;} template void CQueue :: destroyqueue (linkqueue & q) {while (q.front) {q.rear = q.front -> next; free (q.front); q.front = q.rear;}} template void CQUEUE :: Destroysqqueue (Sqqueue & q) {IF (q.base! = Null) delete [] q.base;}
Template Void CQueue :: CLEARQUEUE (LINKQUEUE & q) {q.front = q.rear = null;} template int CQueue :: Queueempty (LinkQueue q) {ix .front -> next! = null) Return 0; Return 1;} template int CQueue :: SqqueueemPty (sqqueue q) {if (q.front! = q.rear) Return 0; Return 1 Template int CQueue :: SqQuelength (Sqqueue q) {Return (Q.Rear - Q.Front MaxqSIZE)% MaxQsize;} template t Cqueue :: GetHead LinkQueue q) {t e; e = q.front -> next-> data; return e;} template t cqueue :: getsqquencehead (sqqueue q) {t e; e = * (q.) Base Q.front; Return E;} Template t Cqueue :: getsqqueuerear (sqqueue q) {t e; e = * (q.base q.rear-1); return E; } Template t Cqueue :: getRear (linkqueue q) {t e = 0; E = Q.Rear-> data; return e;} template Bool CQueue :: enqueue (Linkqueue & q, T E) {queueptr tmp = new qNode; if (tmp == null) Return False; TMP-> DATA = E; TMP-> Next = NULL; Q.REAR-> Next = TMP; Q.REAR = tmp; return true;} template bool cqueue :: e NSQQueue (Sqqueue & q, T E) {IF (Q.Rear 1)% maxqsize == q.front) Return False; * (q.base q.rear) = E; Q.Rear = (Q.REAR 1)% maxqsize; return true;