Skip to content

Commit 3dde134

Browse files
committed
Queues using linked list added
1 parent 553a6dc commit 3dde134

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/*
2+
* C Program to Implement Queue Data Structure using Linked List
3+
*/
4+
#include <stdio.h>
5+
#include <stdlib.h>
6+
#include <malloc.h>
7+
8+
struct node
9+
{
10+
int info;
11+
struct node *ptr;
12+
}*front,*rear,*temp,*front1;
13+
14+
int frontelement();
15+
void enq(int data);
16+
void deq();
17+
void empty();
18+
void display();
19+
void create();
20+
void queuesize();
21+
22+
int count = 0;
23+
24+
void main()
25+
{
26+
int no, ch, e;
27+
28+
printf("\n 1 - Enque");
29+
printf("\n 2 - Deque");
30+
printf("\n 3 - Front element");
31+
printf("\n 4 - Empty");
32+
printf("\n 5 - Exit");
33+
printf("\n 6 - Display");
34+
printf("\n 7 - Queue size");
35+
create();
36+
while (1)
37+
{
38+
printf("\n Enter choice : ");
39+
scanf("%d", &ch);
40+
switch (ch)
41+
{
42+
case 1:
43+
printf("Enter data : ");
44+
scanf("%d", &no);
45+
enq(no);
46+
break;
47+
case 2:
48+
deq();
49+
break;
50+
case 3:
51+
e = frontelement();
52+
if (e != 0)
53+
printf("Front element : %d", e);
54+
else
55+
printf("\n No front element in Queue as queue is empty");
56+
break;
57+
case 4:
58+
empty();
59+
break;
60+
case 5:
61+
exit(0);
62+
case 6:
63+
display();
64+
break;
65+
case 7:
66+
queuesize();
67+
break;
68+
default:
69+
printf("Wrong choice, Please enter correct choice ");
70+
break;
71+
}
72+
}
73+
}
74+
75+
/* Create an empty queue */
76+
void create()
77+
{
78+
front = rear = NULL;
79+
}
80+
81+
/* Returns queue size */
82+
void queuesize()
83+
{
84+
printf("\n Queue size : %d", count);
85+
}
86+
87+
/* Enqueing the queue */
88+
void enq(int data)
89+
{
90+
if (rear == NULL)
91+
{
92+
rear = (struct node *)malloc(1*sizeof(struct node));
93+
rear->ptr = NULL;
94+
rear->info = data;
95+
front = rear;
96+
}
97+
else
98+
{
99+
temp=(struct node *)malloc(1*sizeof(struct node));
100+
rear->ptr = temp;
101+
temp->info = data;
102+
temp->ptr = NULL;
103+
104+
rear = temp;
105+
}
106+
count++;
107+
}
108+
109+
/* Displaying the queue elements */
110+
void display()
111+
{
112+
front1 = front;
113+
114+
if ((front1 == NULL) && (rear == NULL))
115+
{
116+
printf("Queue is empty");
117+
return;
118+
}
119+
while (front1 != rear)
120+
{
121+
printf("%d ", front1->info);
122+
front1 = front1->ptr;
123+
}
124+
if (front1 == rear)
125+
printf("%d", front1->info);
126+
}
127+
128+
/* Dequeing the queue */
129+
void deq()
130+
{
131+
front1 = front;
132+
133+
if (front1 == NULL)
134+
{
135+
printf("\n Error: Trying to display elements from empty queue");
136+
return;
137+
}
138+
else
139+
if (front1->ptr != NULL)
140+
{
141+
front1 = front1->ptr;
142+
printf("\n Dequed value : %d", front->info);
143+
free(front);
144+
front = front1;
145+
}
146+
else
147+
{
148+
printf("\n Dequed value : %d", front->info);
149+
free(front);
150+
front = NULL;
151+
rear = NULL;
152+
}
153+
count--;
154+
}
155+
156+
/* Returns the front element of queue */
157+
int frontelement()
158+
{
159+
if ((front != NULL) && (rear != NULL))
160+
return(front->info);
161+
else
162+
return 0;
163+
}
164+
165+
/* Display if queue is empty or not */
166+
void empty()
167+
{
168+
if ((front == NULL) && (rear == NULL))
169+
printf("\n Queue empty");
170+
else
171+
printf("Queue not empty");
172+
}

0 commit comments

Comments
 (0)