Beispiel #1
0
// 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));
			}
		}
	}
}
Beispiel #2
0
// 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;
}
Beispiel #3
0
// 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 ;
			}
		}
	}
}
Beispiel #5
0
// queue is filled ?
inline Bool filled(Queue q){return (getLength(q)==getQSize(q));}
Beispiel #6
0
// add x in tail
// !filled(q)
void addTail(Queue q, SQueue x){
	getQQueue(q)[getQTail(q)%getQSize(q)] = x;
	setQTail(q, getQTail(q)+1);
}
Beispiel #7
0
// set the element k at x
// !empty(q)
void setElem(Queue q, SQueue x, int k){
	getQQueue(q)[(getQHead(q)+k)%getQSize(q)] = x;
}
Beispiel #8
0
// set the tail at x
// !empty(q)
void setTail(Queue q, SQueue x){
	getQQueue(q)[(getQTail(q)-1)%getQSize(q)] = x;
}
Beispiel #9
0
/// writing ---------------------------------------------------
// set the head at x
// !empty(q)
void setHead(Queue q, SQueue x){
	getQQueue(q)[getQHead(q)%getQSize(q)] = x;
}
Beispiel #10
0
// return the element k
// !empty(q)
inline SQueue getElem(Queue q, int k){return getQQueue(q)[(getQHead(q)+k)%getQSize(q)];}
Beispiel #11
0
// return the tail
// !empty(q)
inline SQueue getTail(Queue q){return getQQueue(q)[(getQTail(q)-1)%getQSize(q)];}
Beispiel #12
0
/// reading ---------------------------------------------------
// return the head
// !empty(q)
inline SQueue getHead(Queue q){return getQQueue(q)[getQHead(q)%getQSize(q)];}