-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patha6f3.c
More file actions
130 lines (105 loc) · 2.83 KB
/
a6f3.c
File metadata and controls
130 lines (105 loc) · 2.83 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
#include <stdio.h>
#define QueueLimit 11
typedef int QueueElementType; /* ï ôýðïò äåäïìÝíùí ôùí óôïé÷åßùí ôçò ïõñÜò
åíäåéêôéêÜ ôýðïò int */
typedef struct {
int Front, Rear, Count;//count metritis gematwn thesewn
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,QueueElementType Item);
main()
{
int i;
QueueType AQueue;
QueueElementType AnItem;
AnItem=0;
CreateQ(&AQueue);
for(i=0;i<QueueLimit;i++)
{
AnItem++;
AddQ(&AQueue,AnItem);
}
printf("---a---\n");
TraverseQ(AQueue,-1);
printf("---b---\n");
AddQ(&AQueue, 2);
TraverseQ(AQueue,-1);
printf("---c---\n");
RemoveQ(&AQueue,&AnItem);
TraverseQ(AQueue,AnItem);
printf("---d---\n");
AddQ(&AQueue, 25);
TraverseQ(AQueue,-1);
printf("---e---\n");
AddQ(&AQueue, 25);
TraverseQ(AQueue,-1);
system("pause");
}
void CreateQ(QueueType *Queue)
/* Ëåéôïõñãßá: Äçìéïõñãåß ìéá êåíÞ ïõñÜ.
ÅðéóôñÝöåé: ÊåíÞ ïõñÜ
*/
{
Queue->Front = 0;
Queue->Rear = 0;
(*Queue).Count= 0;
}
boolean EmptyQ(QueueType Queue)
{
return (Queue.Front == Queue.Rear);
}
boolean FullQ(QueueType Queue)
/* ÄÝ÷åôáé: Ìéá ïõñÜ.
Ëåéôïõñãßá: ÅëÝã÷åé áí ç ïõñÜ åßíáé ãåìÜôç.
ÅðéóôñÝöåé: True áí ç ïõñÜ åßíáé ãåìÜôç, False äéáöïñåôéêÜ
*/
{
return (Queue.Count == QueueLimit-1);
}
void RemoveQ(QueueType *Queue, QueueElementType *Item)
{
if(!EmptyQ(*Queue))
{
*Item = Queue ->Element[Queue -> Front];
Queue ->Front = (Queue ->Front + 1) % QueueLimit;
(*Queue).Count--;
}
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;
(*Queue).Count++;
}
else
printf("Full Queue");
}
void TraverseQ(QueueType Queue,QueueElementType Item) {
int current;
current = Queue.Front;
while (current != Queue.Rear) {
printf("%d", Queue.Element[current]);
current = (current + 1) % QueueLimit;
}
if(Item>-1)
printf("\nRemoved Item = %d",Item);
printf("\nFront=%d Rear=%d Count=%d\n",Queue.Front,Queue.Rear,Queue.Count);
}