-
Notifications
You must be signed in to change notification settings - Fork 240
/
Circular_queue
118 lines (102 loc) · 1.99 KB
/
Circular_queue
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
#include<stdio.h>
#include<stdlib.h>
# define MAX 100
struct queue{
int items[MAX];
int front;
int rear;
};
typedef struct queue q;
void create_empty_queue(q* q1)
{
q1->front = -1;
q1->rear = -1;
}
int IsEmpty(q* q1)
{
if(q1->front == -1 && q1->rear == -1)
return 1;
return 0;
}
int IsFull(q* q1)
{
if((q1->rear==MAX-1 && q1->front==0) ||(q1->rear+1==q1->front))
return 1;
return 0;
}
void Enqueue(q* q1, int n)
{
if(!IsFull(q1))
{
if(q1->front==-1)
q1->front = 0;
q1->rear+=1;
q1->rear%=MAX ;
q1->items[q1->rear]=n;
return;
}
printf("queue overloaded\n");
}
void Dequeue(q* q1)
{
if(!IsEmpty(q1))
{
if(q1->rear==q1->front)
{ q1->front = -2;
q1->rear = -1;
}
q1->front+=1;
if(q1->front>=0)
q1->front %=MAX ;
return;
}
printf("queue underflow\n");
}
void peek(q *q1, int n)
{
if(!IsEmpty(q1))
{
int i;
for( i=q1->front; i!=q1->rear;i=(i+1)%MAX)
if(q1->items[i]==n)
{
printf("element found at index %d\n",i);
return;
}
if(q1->items[i]==n)
{
printf("element found at index %d\n",i);
return;
}
}
printf("element not found\n");//windows-gcc-x86
}
void display(q* q1)
{
if(!IsEmpty(q1))
{
int i;
for( i=q1->front; i!=q1->rear;i=(i+1)%MAX)
printf("%d ",q1->items[i]);
printf("%d\n",q1->items[i]);
printf("\n");
return;
}
printf("queue empty\n");
}
int main()
{
q* q1 = ( q*)malloc(sizeof(q));
create_empty_queue(q1);
Enqueue(q1,2);
Enqueue(q1,3);
Enqueue(q1,4);
Enqueue(q1,5);
display(q1);
peek(q1,3);
Dequeue(q1);
Dequeue(q1);
Dequeue(q1);
display(q1);
peek(q1,2);
}