-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathqueue_ll.cpp
118 lines (102 loc) · 2.01 KB
/
queue_ll.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
using namespace std;
/*
no isFull func here
size()
getFront()
getRear()
isEmpty()
In Queue we have two ends, front and rear
insertion happens at rear end
removal happens at front end
so head should be front end
and tail is rear end for
O(1) insertion and removal,
if two pointers are maintained
*/
class Node {
public:
int data;
Node *next;
Node(int x)
{
data = x;
next = NULL;
}
};
class Queue
{
public:
Node *front, *rear;
// int size;
Queue()
{
front = NULL;
rear = NULL;
// size = 0;
}
void enqueue(int x)
{
Node *temp = new Node(x);
// ++size
// corner case: addn to empty list
if(front == NULL)
{
front = rear = temp;
return;
}
rear->next = temp;
rear = temp;
}
void dequeue()
{
if(front == NULL)
return;
// --size
Node *temp = front;
front = front->next;
// corner case: list has only one node
if(front == NULL)
{
rear = NULL;
}
delete (temp);
}
void printQueue()
{
cout << "\nCurrent status report:\n";
cout << "Front :: " << front->data << "\n";
cout << "Rear :: " << rear->data << "\n";
cout << "Queue::\n";
Node *curr = front;
while(curr!=NULL)
{
cout << curr->data << " ";
curr = curr->next;
}
cout << "\n";
}
};
int main()
{
Queue *q = new Queue();
q->enqueue(10);
q->enqueue(20);
q->enqueue(30);
q->printQueue();
q->dequeue();
q->printQueue();
}
/*
op:
Current status report:
Front :: 10
Rear :: 30
Queue::
10 20 30
Current status report:
Front :: 20
Rear :: 30
Queue::
20 30
*/