-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path17_double_ended_queue.c
162 lines (146 loc) · 3.76 KB
/
17_double_ended_queue.c
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
#include<stdio.h>
#define MAX 50
int QUEUE[MAX];
int front, rear;
front = -1, rear = -1;
// Function to Implement Input-Restricted Queue
int input_restricted()
{
int choice;
while(1)
{
printf("\nEnter\n");
printf("1. To Enqueue an Element\n");
printf("2. To Dequeue Element from Front\n");
printf("3. To Dequeue Element from Rear\n");
printf("0. To Exit\n");
printf("Enter Your Choice : ");
scanf("%d", &choice);
switch(choice)
{
case 0 : return 0;
case 1 : enqueue_rear(); break;
case 2 : dequeue_front(); break;
case 3 : dequeue_rear(); break;
default : printf("\nInvalid Choice, Try Again\n\n");
}
}
}
// Function to Implement Output-Restricted Queue
int output_restricted()
{
int choice;
while(1)
{
printf("\nEnter\n");
printf("1. To Enqueue an Element from Rear\n");
printf("2. To Enqueue an Element from Front\n");
printf("3. To Dequeue Element\n");
printf("0. To Exit\n");
printf("Enter Your Choice : ");
scanf("%d", &choice);
switch(choice)
{
case 0 : return 0;
case 1 : enqueue_rear(); break;
case 2 : enqueue_front(); break;
case 3 : dequeue_front(); break;
default : printf("\nInvalid Choice, Try Again\n\n");
}
}
}
// Function to Enqueue Element from Rear
void enqueue_rear()
{
int item;
if ((front == 0 && rear == (MAX - 1)) || (rear == (front - 1)))
printf("\nQueue Overflow\n");
else
{
if(rear == -1)
front = rear = 0;
else if (rear == (MAX - 1))
rear = 0;
else
rear++;
printf("\nEnter Element : ");
scanf("%d", &item);
QUEUE[rear] = item;
printf("Element Enqueued Successfully\n");
}
}
// Function to Enqueue Element from Front
void enqueue_front()
{
int item;
if ((front == 0 && rear == (MAX - 1)) || (rear == (front - 1)))
printf("\nQueue Overflow\n");
else
{
if(rear == -1)
front = rear = 0;
else if (front == 0)
front = MAX - 1;
else
front--;
printf("\nEnter Element : ");
scanf("%d", &item);
QUEUE[rear] = item;
printf("Element Enqueued Successfully\n");
}
}
// Function to Dequeue Element from Front
void dequeue_front()
{
if (front == -1)
printf("\nQueue Underflow\n");
else
{
printf("\nDequeued Item : %d", QUEUE[front]);
if (front == rear)
front = rear = -1;
else if (front == (MAX - 1))
front = 0;
else
front++;
printf("\nElement Dequeued Successfully\n");
}
}
// Function to Dequeue Element from Rear
void dequeue_rear()
{
if (front == -1)
printf("\nQueue Underflow\n");
else
{
printf("\nDequeued Item : %d", QUEUE[rear]);
if (front == rear)
front = rear = -1;
else if (rear == 0)
rear = MAX - 1;
else
rear--;
printf("\nElement Dequeued Successfully\n");
}
}
int main()
{
int choice;
while(1)
{
printf("Enter\n");
printf("1. To use Input-Restricted Double-Ended Queue\n");
printf("2. To use Output-Restricted Double-Ended Queue\n");
printf("0. To Exit\n");
printf("Enter Your Choice : ");
scanf("%d", &choice);
switch(choice)
{
case 0 : return 0;
case 1 : input_restricted(); break;
case 2 : output_restricted(); break;
default : printf("\nInvalid Choice, Try Again\n\n");
}
}
return 0;
}