Skip to content

Commit e98f2e5

Browse files
authored
Update QueuesWithLinkedLists.c
1 parent 32ed6ff commit e98f2e5

File tree

1 file changed

+70
-56
lines changed

1 file changed

+70
-56
lines changed

src/Chapter_04_Queues/QueuesWithLinkedLists.c

Lines changed: 70 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -13,80 +13,93 @@
1313
struct ListNode {
1414
int data;
1515
struct ListNode *next;
16-
} *front, *rear;
16+
};
17+
18+
struct Queue {
19+
struct ListNode *front;
20+
struct ListNode *rear;
21+
};
1722

1823
/* Create an empty queue */
19-
void initialize() {
20-
front = rear = NULL;
24+
struct Queue *CreateQueue() {
25+
struct Queue *Q;
26+
struct ListNode *temp;
27+
Q = malloc(sizeof(struct Queue));
28+
if(!Q)
29+
return NULL;
30+
31+
temp = malloc(sizeof(struct ListNode));
32+
Q->front = Q->rear = NULL;
33+
return Q;
2134
}
2235

2336
/* Returns queue size */
24-
int size() {
25-
struct ListNode *temp = front;
37+
int size(struct Queue *Q) {
38+
struct ListNode *temp = Q->front;
2639
int count = 0;
2740

28-
if(front == NULL && rear == NULL)
41+
if(Q->front == NULL && Q->rear == NULL)
2942
return 0;
3043

31-
while(temp != rear){
44+
while(temp != Q->rear){
3245
count++;
3346
temp = temp->next;
3447
}
35-
if(temp == rear)
48+
if(temp == Q->rear)
3649
count++;
3750

3851
return count;
3952
}
4053

4154
/* Returns Frnt Element of the Queue */
42-
int frontElement() {
43-
return front->data;
55+
int frontElement(struct Queue *Q) {
56+
return Q->front->data;
4457
}
4558

4659
/* Returns the Rear Element of the Queue */
47-
int rearElement() {
48-
return rear->data;
60+
int rearElement(struct Queue *Q) {
61+
return Q->rear->data;
4962
}
5063

5164
/*
5265
Check's if Queue is empty or not
5366
*/
54-
void isEmpty() {
55-
if (front == NULL && rear == NULL)
67+
void isEmpty(struct Queue *Q) {
68+
if (Q->front == NULL && Q->rear == NULL)
5669
printf("Empty Queue\n");
5770
else
5871
printf("Queue is not Empty\n");
5972
}
6073
/*
6174
Adding elements in Queue
6275
*/
63-
void enqueue(int num) {
76+
void enqueue(struct Queue *Q, int num) {
6477
struct ListNode *temp;
6578
temp = (struct ListNode *)malloc(sizeof(struct ListNode));
6679
temp->data = num;
6780
temp->next = NULL;
6881

69-
if (rear == NULL) {
70-
front = rear = temp;
82+
if (Q->rear == NULL) {
83+
Q->front = Q->rear = temp;
7184
} else {
72-
rear->next = temp;
73-
rear = temp;
85+
Q->rear->next = temp;
86+
Q->rear = temp;
7487
}
7588
}
7689

7790
/*
7891
Removes an element from front of the queue
7992
*/
80-
void dequeue() {
93+
void dequeue(struct Queue *Q) {
8194
struct ListNode *temp;
82-
if (front == NULL) {
95+
if (Q->front == NULL) {
8396
printf("\nQueue is Empty \n");
8497
return;
8598
} else {
86-
temp = front;
87-
front = front->next;
88-
if(front == NULL){
89-
rear = NULL;
99+
temp = Q->front;
100+
Q->front = Q->front->next;
101+
if(Q->front == NULL){
102+
Q->rear = NULL;
90103
}
91104
printf("Removed Element : %d\n", temp->data);
92105
free(temp);
@@ -96,10 +109,10 @@ void dequeue() {
96109
/*
97110
Print's Queue
98111
*/
99-
void printQueue() {
100-
struct ListNode *temp = front;
112+
void printQueue(struct Queue *Q) {
113+
struct ListNode *temp = Q->front;
101114

102-
if ((front == NULL) && (rear == NULL)) {
115+
if ((Q->front == NULL) && (Q->rear == NULL)) {
103116
printf("Queue is Empty\n");
104117
return;
105118
}
@@ -112,51 +125,52 @@ void printQueue() {
112125
}
113126
}
114127

115-
void deleteQueue() {
128+
void deleteQueue(struct Queue *Q) {
116129
struct ListNode *temp;
117-
while(front) {
118-
temp = front;
130+
while(Q->front) {
131+
temp = Q->front;
119132
printf("Element being deleted: %d\n", temp->data);
120-
front = front->next;
133+
Q->front = Q->front->next;
121134
free(temp);
122135
}
123-
free(front);
136+
free(Q);
124137
}
125138

126139

127140
int main() {
128141
/* Initializing Queue */
129-
initialize();
142+
struct Queue *Q;
143+
Q = CreateQueue();
130144
/* Adding elements in Queue */
131-
enqueue(1);
132-
enqueue(3);
133-
enqueue(7);
134-
enqueue(5);
135-
enqueue(10);
145+
enqueue(Q, 1);
146+
enqueue(Q, 3);
147+
enqueue(Q, 7);
148+
enqueue(Q, 5);
149+
enqueue(Q, 10);
136150
/* Printing Queue */
137-
printQueue();
151+
printQueue(Q);
138152
/* Printing size of Queue */
139-
printf("\nSize of Queue : %d\n", size());
153+
printf("\nSize of Queue : %d\n", size(Q));
140154
/* Printing front and rear element of Queue */
141-
printf("Front Element : %d\n", frontElement());
142-
printf("Rear Element : %d\n", rearElement());
155+
printf("Front Element : %d\n", frontElement(Q));
156+
printf("Rear Element : %d\n", rearElement(Q));
143157
/* Removing Element from Queue */
144-
dequeue();
145-
dequeue();
146-
dequeue();
147-
dequeue();
148-
dequeue();
149-
dequeue();
150-
enqueue(15);
151-
enqueue(100);
158+
dequeue(Q);
159+
dequeue(Q);
160+
dequeue(Q);
161+
dequeue(Q);
162+
dequeue(Q);
163+
dequeue(Q);
164+
enqueue(Q, 15);
165+
enqueue(Q, 100);
152166
/* Printing Queue */
153-
printQueue();
167+
printQueue(Q);
154168
/* Printing size of Queue */
155-
printf("\nSize of Queue : %d\n", size());
169+
printf("\nSize of Queue : %d\n", size(Q));
156170
/* Printing front and rear element of Queue */
157-
printf("Front Element : %d\n", frontElement());
158-
printf("Rear Element : %d\n", rearElement());
171+
printf("Front Element : %d\n", frontElement(Q));
172+
printf("Rear Element : %d\n", rearElement(Q));
159173
/* Removing Queue */
160-
deleteQueue();
174+
deleteQueue(Q);
161175
return 0;
162176
}

0 commit comments

Comments
 (0)