mirror of
https://github.com/TheAlgorithms/C.git
synced 2026-02-12 05:44:32 +00:00
142 lines
2.4 KiB
C
142 lines
2.4 KiB
C
/* 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;
|
|
}
|