-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueue_using_linked_list.c
149 lines (136 loc) · 2.36 KB
/
Queue_using_linked_list.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
//Implement stack or linear queue ADT using linked list
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node *start = NULL;
struct node* add_end(struct node *); //insertion
struct node* del_beg(struct node *); //deletion
struct node* display(struct node *); //display
int peek(struct node *); //peek
int main()
{
int option,val;
printf("**************LINEAR QUEUE*************");
printf("\n***************MAIN MENU***************");
printf("\n1.Insert an element.");
printf("\n2.Delete an element.");
printf("\n3.Peek.");
printf("\n4.Display the queue.");
printf("\n5.EXIT");
top:
printf("\nYour option:\t");
scanf("%d",&option);
switch(option)
{
case 1:
start = add_end(start);
break;
case 2:
start = del_beg(start);
break;
case 3:
val=peek(start);
if(val!=-1)
printf("\nElement in the front of the queue is:\t%d",val);
break;
case 4:
start = display(start);
break;
case 5:
exit(0);
break;
default:
printf("\nINVALID INPUT.");
break;
}
goto top;
return 0;
}
//-----------------------------------------------------------------
//Display queue
struct node* display(struct node *start)
{
if(start==NULL)
{
printf("\nLINKED LIST IS EMPTY.");
}
else
{
struct node *ptr;
ptr=start;
while(ptr!=NULL) //not ptr->next
{
printf("%d\t",ptr->data);
ptr=ptr->next;
}
}
return start;
}
//Insertion
struct node* add_end(struct node *start)
{
int num;
struct node *new_node,*ptr;
new_node = (struct node*)malloc(sizeof(struct node));
if(new_node==NULL)
{
printf("\nOut of memory space.");
exit(0);
}
else
{
printf("\nEnter value: ");
scanf("%d",&num);
new_node -> data = num;
new_node -> next = NULL;
ptr=start;
if(start==NULL)
{
start = new_node;
}
else
{
while(ptr->next!=NULL)
{
ptr = ptr -> next;
}
ptr -> next = new_node;
}
}
return start;
}
//Deletion
struct node* del_beg(struct node *start)
{
if(start==NULL)
{
printf("\nLINKED LIST IS EMPTY.");
}
else
{
struct node *ptr;
ptr=start;
start=start->next; //NOT ptr=ptr->next
free(ptr);
}
return start;
}
//peek
int peek(struct node * start)
{
if(start==NULL)
{
printf("\nLINKED LIST IS EMPTY.");
return -1;
}
else
{
return start->data;
}
}