Queue Data Structure: Implementation and Operations in C, Exercises of Data Structures and Algorithms

problems and solve queue data structure

Typology: Exercises

2018/2019

Uploaded on 03/03/2019

hassan-yosri
hassan-yosri 🇪🇬

2 documents

1 / 3

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
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();
pf3

Partial preview of the text

Download Queue Data Structure: Implementation and Operations in C and more Exercises Data Structures and Algorithms in PDF only on Docsity!

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; }