-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patha10f3.c
More file actions
141 lines (119 loc) · 3.5 KB
/
Copy patha10f3.c
File metadata and controls
141 lines (119 loc) · 3.5 KB
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
#include <stdlib.h>
#include <stdio.h>
#define QueueLimit 20
typedef int QueueElementType;
typedef struct {
int Front, Rear, randomOdds, randomEvens;
QueueElementType Element[QueueLimit];
} QueueType;
typedef enum {FALSE, TRUE} boolean;
void CreateQ(QueueType *Queue);
boolean EmptyQ(QueueType Queue);
boolean FullQ(QueueType Queue);
void RemoveQ(QueueType *Queue, QueueElementType *Item);
void AddQ(QueueType *Queue, QueueElementType Item);
void TraverseQ(QueueType Queue);
int main() {
QueueElementType evenItem, oddItem;
QueueType OddQueue, EvenQueue;
CreateQ(&OddQueue);
CreateQ(&EvenQueue);
int i, j, randomEvens, randomOdds;
for(i=0; i<QueueLimit; i++) {
j = rand()% QueueLimit + 1;
if(j%2==0){
AddQ(&EvenQueue, j);
}else{
AddQ(&OddQueue, j);
}
}
printf("Size of Even Queue: %d\n", EvenQueue.Rear - EvenQueue.Front);
TraverseQ(EvenQueue);
printf("Size of Odd Queue: %d\n", OddQueue.Rear - OddQueue.Front);
TraverseQ(OddQueue);
randomEvens = rand() % (EvenQueue.Rear - EvenQueue.Front+1);
printf("Random number of items: %d\n", randomEvens);
for(i=0; i<randomEvens; i++){
evenItem = EvenQueue.Element[EvenQueue.Front];
AddQ(&EvenQueue, evenItem) ;
RemoveQ(&EvenQueue, &evenItem);
}
printf("Size of Even Queue: %d\n", EvenQueue.Rear - EvenQueue.Front);
TraverseQ(EvenQueue);
randomOdds = rand() % (OddQueue.Rear - OddQueue.Front+1);
printf("Random number of items: %d\n", randomOdds);
for(i=0; i<randomOdds; i++){
oddItem = EvenQueue.Element[OddQueue.Front];
RemoveQ(&OddQueue, &oddItem);
AddQ(&OddQueue, oddItem) ;
}
printf("Size of Odd Queue: %d\n", OddQueue.Rear - OddQueue.Front);
TraverseQ(OddQueue);
}
void CreateQ(QueueType *Queue)
/* Ëåéôïõñãßá: Äçìéïõñãåß ìéá êåíÞ ïõñÜ.
ÅðéóôñÝöåé: ÊåíÞ ïõñÜ
*/
{
Queue->Front = 0;
Queue->Rear = 0;
}
boolean EmptyQ(QueueType Queue)
/* ÄÝ÷åôáé: Ìéá ïõñÜ.
Ëåéôïõñãßá: ÅëÝã÷åé áí ç ïõñÜ åßíáé êåíÞ.
ÅðéóôñÝöåé: True áí ç ïõñÜ åßíáé êåíÞ, False äéáöïñåôéêÜ
*/
{
return (Queue.Front == Queue.Rear);
}
boolean FullQ(QueueType Queue)
/* ÄÝ÷åôáé: Ìéá ïõñÜ.
Ëåéôïõñãßá: ÅëÝã÷åé áí ç ïõñÜ åßíáé ãåìÜôç.
ÅðéóôñÝöåé: True áí ç ïõñÜ åßíáé ãåìÜôç, False äéáöïñåôéêÜ
*/
{
return ((Queue.Front) == ((Queue.Rear +1) % QueueLimit));
}
void RemoveQ(QueueType *Queue, QueueElementType *Item)
/* ÄÝ÷åôáé: Ìéá ïõñÜ.
Ëåéôïõñãßá: Áöáéñåß ôï óôïé÷åßï Item áðü ôçí åìðñüò Üêñç ôçò ïõñÜò
áí ç ïõñÜ äåí åßíáé êåíÞ.
ÅðéóôñÝöåé: Ôï óôïé÷åßï Item êáé ôçí ôñïðïðïéçìÝíç ïõñÜ.
¸îïäïò: ÌÞíõìá êåíÞò ïõñÜ áí ç ïõñÜ åßíáé êåíÞ
*/
{
if(!EmptyQ(*Queue))
{
*Item = Queue ->Element[Queue -> Front];
Queue ->Front = (Queue ->Front + 1) % QueueLimit;
}
else
printf("Empty Queue");
}
void AddQ(QueueType *Queue, QueueElementType Item)
/* ÄÝ÷åôáé: Ìéá ïõñÜ Queue êáé Ýíá óôïé÷åßï Item.
Ëåéôïõñãßá: ÐñïóèÝôåé ôï óôïé÷åßï Item óôçí ïõñÜ Queue
áí ç ïõñÜ äåí åßíáé ãåìÜôç.
ÅðéóôñÝöåé: Ôçí ôñïðïðïéçìÝíç ïõñÜ.
¸îïäïò: ÌÞíõìá ãåìÜôçò ïõñÜò áí ç ïõñÜ åßíáé ãåìÜôç
*/
{
int NewRear;
if(!FullQ(*Queue))
{
NewRear = (Queue ->Rear + 1) % QueueLimit;
Queue ->Element[Queue ->Rear] = Item;
Queue ->Rear = NewRear;
}
else
printf("Full Queue");
}
void TraverseQ(QueueType Queue) {
int current;
current = Queue.Front;
while (current != Queue.Rear) {
printf("%d ", Queue.Element[current]);
current = (current + 1) % QueueLimit;
}
printf("\n");
}