circular_queue_using_linked_list.cpp 1.3 KB
Newer Older
Y
yanglbme 已提交
1
#include <iostream>
M
Mayank Khanna 已提交
2

3
struct node {
M
Mayank Khanna 已提交
4 5 6
    int data;
    struct node *next;
};
7
class Queue {
M
Mayank Khanna 已提交
8 9
    node *front;
    node *rear;
Y
yanglbme 已提交
10

11 12
 public:
    Queue() {
M
Mayank Khanna 已提交
13 14 15
        front = NULL;
        rear = NULL;
    }
16
    void createNode(int val) {
M
Mayank Khanna 已提交
17 18 19 20 21 22
        node *ptr;
        node *nn;
        nn = new node;
        ptr = front;
        nn->data = val;
        nn->next = NULL;
Y
yanglbme 已提交
23 24
        front = nn;
        rear = nn;
M
Mayank Khanna 已提交
25
    }
26 27
    void enqueue(int val) {
        if (front == NULL || rear == NULL) {
M
Mayank Khanna 已提交
28
            createNode(val);
29
        } else {
M
Mayank Khanna 已提交
30 31
            node *ptr;
            node *nn;
Y
yanglbme 已提交
32
            ptr = front;
M
Mayank Khanna 已提交
33 34 35 36 37 38 39
            nn = new node;
            nn->data = val;
            rear->next = nn;
            nn->next = front;
            rear = nn;
        }
    }
40
    void dequeue() {
M
Mayank Khanna 已提交
41 42 43
        node *n;
        n = front;
        front = front->next;
Y
yanglbme 已提交
44
        delete (n);
M
Mayank Khanna 已提交
45
    }
46
    void traverse() {
M
Mayank Khanna 已提交
47
        node *ptr;
Y
yanglbme 已提交
48
        ptr = front;
49 50
        do {
            std::cout << ptr->data << " ";
Y
yanglbme 已提交
51 52
            ptr = ptr->next;
        } while (ptr != rear->next);
53
        std::cout << front->data << std::endl;
M
Mayank Khanna 已提交
54 55
    }
};
56
int main(void) {
M
Mayank Khanna 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69
    Queue q;
    q.enqueue(10);
    q.enqueue(20);
    q.enqueue(30);
    q.enqueue(40);
    q.enqueue(50);
    q.enqueue(60);
    q.enqueue(70);
    q.traverse();
    q.dequeue();
    q.traverse();
    return 0;
}