

Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
problems and solve queue data structure
Typology: Exercises
1 / 3
This page cannot be seen from the preview
Don't miss anything!


enum bool {true = 1, false = 0};
typedef enum bool bool;
typedef struct node{ int data; struct node *next; } Node, *NodePtr;
typedef struct queueType{ NodePtr head; NodePtr tail; } QueueType, *Queue;
NodePtr makeNode(int x){ NodePtr np = (NodePtr) malloc(sizeof (Node)); np->next = NULL; np->data = x; return np; }
// Basic operations Queue initQueue(){ Queue qp = (Queue) malloc(sizeof (QueueType)); qp->head = NULL; qp->tail = NULL; return qp; }
bool emptyQ(Queue q){ return (q->head == NULL); }
// Add to queue void enqueue(Queue q, int x){ // Insert back NodePtr np = makeNode(x); if(emptyQ(q)){ q->head = np; q->tail = np; return; } q ->tail->next = np; q->tail = np; }
// Remove from queue int dequeue(Queue q){ // Delete front
if(emptyQ(q)){ printf("\nQueue is empty!\n"); return -1; } NodePtr p = q->head; int x = p->data; q->head = q->head->next; if(q->head == NULL)q->tail = NULL; free(p); return x; }
#include <stdio.h> #include <stdlib.h> #include "queue.h" #include "stack.h"
void display(Queue q){ int x; Queue t = initQueue();
while(!emptyQ(q)){ x = dequeue(q); printf("%d ", x); enqueue(t, x); } printf("\n"); while(!emptyQ(t)){ enqueue(q, dequeue(t)); } }
//1. Swap first and last element in a queue. void swapFirstLast(Queue q){ int x; //Initialize two stacks s1, s stack s1 = initStack(), s2 = initStack(); //Extract first element int first = dequeue(q); //Iterate over intermediate elements in queue while(!emptyQ(q)){ push(s1, dequeue(q)); } //Extract last element (on top of stack) int last = pop(s1); //Reverse elements in stack s while(!emptyStack(s1)){ push(s2, pop(s1)); } //add last element to queue first so it becomes the first element in queue enqueue(q, last); //add elements from the stack while(!emptyStack(s2)){ enqueue(q, pop(s2)); } //add first element to queue so it becomes the last element enqueue(q, first); }
//2. Delete the ith element from a queue. void deleteIth(Queue q, int i){ int x, cnt = 1; Queue t = initQueue(); while(!emptyQ(q)){ x = dequeue(q); if(cnt++ != i)
enqueue(t, x); } while(!emptyQ(t)){ enqueue(q, dequeue(t)); } }
//3. Delete all elements in a queue of value below average of all the elements. void deleteBelowAvg(Queue q){ int x, cnt = 0; double sum = 0; Queue t = initQueue(); //Iterate over queue and calculate the average while(!emptyQ(q)){ x = dequeue(q); sum += x; cnt++; enqueue(t, x); } double avg = sum / cnt; printf("AVG = %f\n", avg); while(!emptyQ(t)){ x = dequeue(t); if(x >= avg) enqueue(q, x); } }
//4. Extract even values from a queue to another queue. Queue extractEvenValues(Queue q){ int x; Queue t = initQueue(), evenQ = initQueue (); while(!emptyQ(q)){ x = dequeue(q); if(x % 2 == 0) enqueue(evenQ, x); enqueue(t, x); } while(!emptyQ(t)){ enqueue(q, dequeue(t)); } return evenQ; }