#include <stdio.h>#include<stdlib.h>#defineOK 1#defineFALSE 0#defineERROR-1typedefintStatus;typedefintQelemtype;typedefstructqnode{qelemtype data; Qnode*next;}*queueptr;structlinkqueue{queueptr front,rear;//team head, tail hands}; Status Initqueue (Linkqueue&p) {Q.front->next =NULL; returnOK;} Status Destroyqueue (Linkqueue&Q) { while(q.front) {q.rear= q.front->Next; Free(Q.front); Q.front=q.rear; } returnOK;} Status Clearqueue (Linkqueue&Q) {Queueptr p,q; Q.rear=Q.front; P= q.front->Next; Q.front->next =NULL; while(p) {Q=p; P= p->Next; Free(q); } returnOK;} Status queueempty (Linkqueue Q) {if(Q.front = =q.rear)return true; Else return false;}intqueuelength (Linkqueue Q) {inti =0; Queueptr p; P=Q.front; while(Q.rear! =Q.front) {i++; P= p->Next; } returni;} Status GetHead (linkqueue q,qelemtype&e) {queueptr p; if(Q.front = =q.rear)returnERROR; P= q.front->Next; E= p->data; returnOK;} Status EnQueue (Linkqueue&Q,qelemtype e) {queueptr P= (queueptr)malloc(sizeof(Qnode)); P->data =e; P->next =NULL; Q.rear->next =p; Q.rear=p; returnOK;} Status DeQueue (Linkqueue&q,qelemtype &D) {queueptr p; if(Q.front = =q.rear)returnERROR; P= q.front->Next; E= p->data; Q.front->next = p->Next; if(Q.rear = =p) q.rear=Q.front; Free(P); returnOK;} Status Queuetraverse (Linkqueue Q,void(*VI) (Qelemtype)) {queueptr p; P= q.front->Next; while(p) {VI (P-data); P= p->Next; } printf ("\ n"); returnOK;}intMain () {return 0;}
Sequential queues:
//Sequential Queue#include <stdio.h>#include<stdlib.h>#defineOK 1#defineFALSE 0#defineERROR-1#defineOVERFLOW-1#defineMaxqsize 20typedefintStatus;typedefintQelemtype;structsqqueue{Qelemtype*Base; intFront; intrear;}; Status Initqueue (Sqqueue&Q) {Q.Base= (Qelemtype *)malloc(Maxqsize *sizeof(Qelemtype)); //Q.front = Q.rear =0; returnOK;} Status Destroyqueue (Sqqueue&p) { if(Q.Base) Free(Q.Base); Q.Base=NULL; Q.front= Q.rear =0; return 0;} Status Clearqueue (Sqqueue&p) {Q.front= Q.rear =0; returnOK;} Status queueempty (Sqqueue Q) {if(Q.front = =q.rear)return true; Else return false;}intqueuelength (Sqqueue Q) {return(Q.rear-q.front);} Status GetHead (sqqueue q,qelemtype&e) { if(Q.front = =q.rear)returnERROR; E= * (Q.Base+Q.front); returnOK;} Status EnQueue (Sqqueue&Q,qelemtype e) { if(Q.rear >=maxqsize) {Q.Base= (Qelemtype *)realloc(Q.Base, (Q.rear +1) *sizeof(Qelemtype)); // } * (Q.Base+ q.rear) =e; Q.rear++; returnOK;} Status DeQueue (Sqqueue&Q,qelemtype e) { if(Q.front = =q.rear)returnERROR; E= Q.Base[Q.front]; Q.front= (Q.front +1); returnOK;} Status Queuetraverse (Sqqueue Q,void(*VI) (Qelemtype)) { inti; I=Q.front; while(I! =q.rear) {VI (* (Q.Base+i)); I++; } printf ("\ n"); returnOK;}
Sequential Loop queue:
//Sequential Loop Queue#include <stdio.h>#include<stdlib.h>#defineOK 1#defineFALSE 0#defineERROR-1#defineOVERFLOW-1#defineMaxqsize 5typedefintStatus;typedefintQelemtype;structsqqueue{Qelemtype*Base; intFront; intrear;}; Status Initqueue (Sqqueue&p) {Q.Base= (Qelemtype *)malloc(Maxqsize *sizeof(Qelemtype)); //Q.front = Q.rear =0; returnOK;} Status Destroyqueue (Sqqueue&Q) { if(Q.Base) Free(Q.Base); Q.Base=NULL; Q.front= Q.rear =0; return 0;} Status Clearqueue (Sqqueue&Q) {Q.front= Q.rear =0; returnOK;} Status queueempty (Sqqueue Q) {if(Q.front = =q.rear)return true; Else return false;}intqueuelength (Sqqueue Q) {return(Q.rear-q.front + maxqsize)%Maxqsize;} Status GetHead (sqqueue q,qelemtype&e) { if(Q.front = =q.rear)returnERROR; E= * (Q.Base+Q.front); returnOK;} Status EnQueue (Sqqueue&Q,qelemtype e) { if((Q.rear +1)% Maxqsize = = Q.front)//Team Full returnERROR; Q.Base[Q.rear] =e; Q.rear= (Q.rear +1) %maxqsize; returnOK;} Status DeQueue (Sqqueue&Q,qelemtype e) { if(Q.front = =q.rear)returnERROR; E= Q.Base[Q.front]; Q.front= (Q.front +1) %maxqsize; returnOK;} Status Queuetraverse (Sqqueue Q,void(*VI) (Qelemtype)) { inti; I=Q.front; while(I! =q.rear) {VI (* (Q.Base+i)); I= (i +1) %maxqsize; } printf ("\ n"); returnOK;}
Chained queue + sequential queue + sequential loop queue