mirror of
https://github.com/TheAlgorithms/C
synced 2024-11-24 22:39:52 +03:00
Create queue_linked_list.c
Implementation of Queue using Linked List.
This commit is contained in:
parent
f4cbdd39cf
commit
b86a4747ca
149
data_structures/linked_list/queue_linked_list.c
Normal file
149
data_structures/linked_list/queue_linked_list.c
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/* Queue using Linked List - Program to create a queue ADT using linked list. ADT should support the following operations
|
||||||
|
1) Createqueue
|
||||||
|
2) Insert into the queue
|
||||||
|
3) Delete from the queue
|
||||||
|
4) destroyqueue
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* queue q declared globally */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#define NULL 0
|
||||||
|
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int data ;
|
||||||
|
struct node *next ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
struct queue
|
||||||
|
{
|
||||||
|
struct node *front , *rear ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
struct queue q ;
|
||||||
|
|
||||||
|
/* This function initializes the queue to empty by making both front and rear as NULL */
|
||||||
|
void createqueue()
|
||||||
|
{
|
||||||
|
q.front=q.rear=NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int empty()
|
||||||
|
{
|
||||||
|
if(q.front==NULL)
|
||||||
|
return 1 ;
|
||||||
|
else
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert(int x)
|
||||||
|
{
|
||||||
|
struct node *pnode ;
|
||||||
|
|
||||||
|
pnode=(struct node*)malloc(sizeof(struct node)) ;
|
||||||
|
if(pnode==NULL)
|
||||||
|
{
|
||||||
|
printf("Memory overflow. Unable to insert.\n") ;
|
||||||
|
exit(1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
pnode->data=x ;
|
||||||
|
pnode->next=NULL ; /* New node is always last node */
|
||||||
|
|
||||||
|
if(empty())
|
||||||
|
q.front=q.rear=pnode ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(q.rear)->next=pnode ;
|
||||||
|
q.rear=pnode ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int removes()
|
||||||
|
{
|
||||||
|
int x ;
|
||||||
|
struct node *p ;
|
||||||
|
|
||||||
|
if(empty())
|
||||||
|
{
|
||||||
|
printf("Queue Underflow. Unable to remove.\n") ;
|
||||||
|
exit(1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
p=q.front ;
|
||||||
|
x=(q.front)->data ;
|
||||||
|
q.front=(q.front)->next ;
|
||||||
|
if(q.front==NULL) /* Queue contained only one node */
|
||||||
|
q.rear=NULL ;
|
||||||
|
free(p) ;
|
||||||
|
return x ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void show()
|
||||||
|
{
|
||||||
|
struct node *p ;
|
||||||
|
|
||||||
|
if(empty())
|
||||||
|
printf("Queue empty. No data to display \n") ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Queue from front to rear is as shown: \n") ;
|
||||||
|
|
||||||
|
p=q.front ;
|
||||||
|
while(p!=NULL)
|
||||||
|
{
|
||||||
|
printf("%d ",p->data) ;
|
||||||
|
p=p->next ;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n") ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroyqueue()
|
||||||
|
{
|
||||||
|
q.front=q.rear=NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int x , ch ;
|
||||||
|
|
||||||
|
createqueue() ;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
printf("\n\n Menu: \n") ;
|
||||||
|
printf("1:Insert \n") ;
|
||||||
|
printf("2:Remove \n") ;
|
||||||
|
printf("3:exit \n") ;
|
||||||
|
printf("Enter your choice: ") ;
|
||||||
|
scanf("%d",&ch) ;
|
||||||
|
|
||||||
|
switch(ch)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("Enter element to be inserted: ") ;
|
||||||
|
scanf("%d",&x) ;
|
||||||
|
insert(x) ;
|
||||||
|
show() ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
x=removes() ;
|
||||||
|
printf("Element removed is: %d\n",x) ;
|
||||||
|
show() ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(ch!=3) ;
|
||||||
|
|
||||||
|
destroyqueue() ;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user