-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQ31.cpp
191 lines (172 loc) · 2.89 KB
/
Q31.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*
Aledutron
SPPU 2019 SE DSL Lab
SPPU Computer Engineering Second Year (SE) Data Structure Lab (DSL) / Fundamentals of Data Structures (FDS) Assignments (2019 Pattern)
Youtube DSL / FDS Playlist Link: https://youtube.com/playlist?list=PLlShVH4JA0osUGQB95eJ8h5bTTzJO89vz&si=u12IYwo93Z7RU4e8
Problem Statement:
Group-E\Q31.cpp
A double-ended queue (deque) is a linear list in which additions and deletions may be made at either end. Obtain a data representation mapping a deque into a one☻dimensional array. Write C++ program to simulate deque with functions to add and delete elements from either end of the deque.
Explaination Video Link: https://www.youtube.com/watch?v=XD20iZgUfcA&list=PLlShVH4JA0osUGQB95eJ8h5bTTzJO89vz&index=15&pp=iAQB
*/
#include <iostream>
using namespace std;
class Deque
{
public:
const static int size = 10;
int array[size];
int front = -1, rear = -1;
bool isFull()
{
if ((front == 0 && rear == size - 1) || (rear == front - 1))
{
return 1;
}
return 0;
}
bool isEmpty()
{
if (front == -1 && rear == -1)
{
return 1;
}
return 0;
}
void insertFront(int x)
{
if (isFull())
{
cout << "Deque Overflow" << endl;
return;
}
if (front == -1)
{
front = 0;
rear = 0;
}
else if (front == 0)
{
front = size - 1;
}
else
{
front = front - 1; // front--;
}
array[front] = x;
// cout << "Front is: " << front << endl;
}
void insertRear(int x)
{
if (isFull())
{
cout << "Deque Overflow" << endl;
return;
}
if (rear == -1)
{
front = 0;
rear = 0;
}
else if (rear == size - 1)
{
rear = 0;
}
else
{
rear = rear + 1; // rear++; rear += 1;
}
array[rear] = x;
// cout << "Rear is: " << rear << endl;
}
void deleteFront()
{
if (isEmpty())
{
cout << "Deque Underflow" << endl;
return;
}
if (front == rear)
{
front = -1;
rear = -1;
}
else if (front == size - 1)
{
front = 0;
}
else
{
front++;
}
}
void deleteRear()
{
if (isEmpty())
{
cout << "Deque Underflow" << endl;
return;
}
if (front == rear)
{
front = -1;
rear = -1;
}
else if (rear == 0)
{
rear = size - 1;
}
else
{
rear--;
}
}
void display()
{
if (isEmpty())
{
cout << "Deque Underflow" << endl;
return;
}
cout << "\nDeque contains: ";
if (front < rear)
{
for (int i = front; i <= rear; i++)
{
cout << array[i] << " ";
}
}
else if (front == rear)
{
cout << array[front];
}
else
{
for (int i = front; i < size; i++)
{
cout << array[i] << " ";
}
for (int i = 0; i <= rear; i++)
{
cout << array[i] << " ";
}
}
}
};
int main()
{
Deque q;
q.insertFront(10);
q.insertFront(16);
q.insertFront(20);
q.insertFront(13);
q.insertRear(30);
q.insertRear(37);
q.display();
q.deleteFront();
q.deleteFront();
q.deleteRear();
q.deleteRear();
q.deleteRear();
q.deleteRear();
q.display();
}