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