Monday, 12 September 2016

Queues in C++


/* 
 * File:   queue.cpp
 * Author: dk
 *
 * Created on September 9, 2016, 5:06 PM
 * Note : Implementation of Queues with only head pointer, enqueue is O(1) and
 *        dequeue is O(n) operation.
 */
#include <iostream>

using namespace std;

struct queue_node{

    int var;
    queue_node *next;
};


queue_node *EnQueue(queue_node **head , int val){

    queue_node *temp = (*head);

    queue_node *new_node = new queue_node;
    temp->var = val;
    new_node->next = NULL;

    if (temp != NULL)
        new_node->next = (*head);

    (*head) = new_node;

    return new_node;
}

int QueueSize(queue_node **head){

    queue_node *temp = (*head);
    int queue_size = 0;

    while (temp->next != NULL) {
        ++queue_size;
        temp = temp->next;
    }
    return queue_size;
}

void DeQueue(queue_node **head){
 
    queue_node *temp = (*head);
    queue_node *prev = (*head);
 
    if(temp->next == NULL){
        cout << "Empty Queue" << endl;
        return;
    }
 
    while(temp->next != NULL) {
     
        prev = temp ;
        temp = temp->next;
    }
 
    prev->next = NULL;
    cout << "Dequeued value is : " << temp->var << endl;
 
    delete temp;
}

/*
 *
 */
int main(int argc, char** argv) {
 
    queue_node *head = new queue_node;
 
    head->next = NULL;
 
    EnQueue(&head , 1);
    EnQueue(&head , 2);
    EnQueue(&head , 3);
    EnQueue(&head , 4);
    cout << "Queue Size : " << QueueSize(&head) << endl;

    DeQueue(&head);
    DeQueue(&head);
    DeQueue(&head);
    DeQueue(&head);
    cout << "Queue Size : " << QueueSize(&head) << endl;
    DeQueue(&head);
 
    delete head;
    return 0;
}


Output :

Queue Size : 4
Dequeued value is : 1
Dequeued value is : 2
Dequeued value is : 3
Dequeued value is : 4
Queue Size : 0
Empty Queue

No comments:

Post a Comment