// add x at position k // 0 <= k (< getQSize(q)) // !filled(q) void addElem(Queue q, SQueue x, int k){ int i; if (k >= getLength(q)) addTail(q, x); else if (k==0) addHead(q, x); else { if (k >= getLength(q)/2) { for (i=getLength(q)-1; i>=k; i--) { setElem(q, getElem(q, i), i+1); } setElem(q, x, i+1); setQTail(q, getQTail(q)+1); } else { for (i=0; i<k; i++) { setElem(q, getElem(q, i), i-1); } setElem(q, x, i-1); setQHead(q, getQHead(q)-1); if (getQHead(q)<0) { setQHead(q, getQSize(q)+getQHead(q)); setQTail(q, getQTail(q)+getQSize(q)); } } } }
// add x in head // !filled(q) void addHead(Queue q, SQueue x){ setQHead(q, getQHead(q)-1); if (getQHead(q)<0) { setQHead(q, getQSize(q)+getQHead(q)); setQTail(q, getQTail(q)+getQSize(q)); } getQQueue(q)[getQHead(q)%getQSize(q)] = x; }
// write values of q in cq (at same positions in the queue) void copyValues(Queue q, Queue cq){ int i, j=getLength(q), k=getQSize(cq), l=getLength(cq); for (i=0; i<j && i<k; i++) { setElem(cq, getElem(q, i), i); } if (i-l > 0) setQTail(cq, getQTail(cq)+(i-l)); }
int main() { int i = 1, n ; struct queue *Q = createQueue(1) ; int o ; while(i) { printf("Enter 1 to EnQueue\nEnter 2 to DeQueue\nEnter 3 to get the size of the queue\nEnter 4 to exit\n------------------->"); scanf("%d" , &o) ; switch(o) { case 1 : { int data ; printf("Enter the data : "); scanf("%d" , &data) ; EnQueue(Q , data) ; break ; } case 2 : { int data = DeQueue(Q) ; if(data != INT_MIN) { printf("Data i.e. DeQueued is : %d \n",data ); } else { printf("Queue is Empty\n"); } break ; } case 3 : { int size = getQSize(Q) ; printf("Size of the queue is : %d\n", size); break ; } case 4 : { i = 0 ; } } } }
// queue is filled ? inline Bool filled(Queue q){return (getLength(q)==getQSize(q));}
// add x in tail // !filled(q) void addTail(Queue q, SQueue x){ getQQueue(q)[getQTail(q)%getQSize(q)] = x; setQTail(q, getQTail(q)+1); }
// set the element k at x // !empty(q) void setElem(Queue q, SQueue x, int k){ getQQueue(q)[(getQHead(q)+k)%getQSize(q)] = x; }
// set the tail at x // !empty(q) void setTail(Queue q, SQueue x){ getQQueue(q)[(getQTail(q)-1)%getQSize(q)] = x; }
/// writing --------------------------------------------------- // set the head at x // !empty(q) void setHead(Queue q, SQueue x){ getQQueue(q)[getQHead(q)%getQSize(q)] = x; }
// return the element k // !empty(q) inline SQueue getElem(Queue q, int k){return getQQueue(q)[(getQHead(q)+k)%getQSize(q)];}
// return the tail // !empty(q) inline SQueue getTail(Queue q){return getQQueue(q)[(getQTail(q)-1)%getQSize(q)];}
/// reading --------------------------------------------------- // return the head // !empty(q) inline SQueue getHead(Queue q){return getQQueue(q)[getQHead(q)%getQSize(q)];}