-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathqueue.h
More file actions
168 lines (146 loc) · 4.39 KB
/
queue.h
File metadata and controls
168 lines (146 loc) · 4.39 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 프로세스를 나타내는 구조체
typedef struct {
int id; // 프로세스 ID
int priority; // 프로세스의 우선순위
int remaining; // 프로세스의 남은 실행 시간
int waiting_time; // 프로세스의 대기 시간
bool interrupt; //interrupt 처리 유무
int interrupttime; // interrupt하는 중 실행하는 time
} Thread;
// Structure to represent the queue
typedef struct {
Thread arr[MAX_SIZE];
int front;
int rear;
} Queue;
// Function to initialize the queue
void initializeQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// Function to check if the queue is empty
int isEmpty(Queue *queue) {
return (queue->front == -1 && queue->rear == -1);
}
// Function to check if the queue is full
int isFull(Queue *queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
// Function to enqueue an element into the queue
void enqueue(Queue *queue, Thread value) {
if (isFull(queue)) {
printf("Queue is full. Cannot enqueue.\n");
return;
}
if (isEmpty(queue)) {
queue->front = 0;
queue->rear = 0;
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
queue->arr[queue->rear] = value;
}
// Function to dequeue an element from the queue
Thread dequeue(Queue *queue) {
Thread value;
if (isEmpty(queue)) {
printf("Queue is empty. Cannot dequeue.\n");
exit(1);
}
value = queue->arr[queue->front];
if (queue->front == queue->rear) {
queue->front = -1;
queue->rear = -1;
} else {
queue->front = (queue->front + 1) % MAX_SIZE;
}
return value;
}
// Function to display the elements of the queue
void displayQueue(Queue *queue) {
int i;
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return;
}
printf("Queue elements: ");
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", queue->arr[i].id);
}
printf("%d\n", queue->arr[i].id);
}
int size(Queue *queue) {
if (isEmpty(queue)) {
return 0;
}
return (queue->rear - queue->front + MAX_SIZE) % MAX_SIZE + 1;
}
void updateRemaintime(Queue *queue, int time)
{
queue->arr[queue->front].remaining=queue->arr[queue->front].remaining-time;
}
/*front Thread 반환*/
Thread getFront(Queue *queue)
{
return queue->arr[queue->front];
}
void updateWaitingtime(Queue *queue, int time)
{
int i;
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
queue->arr[i].waiting_time=queue->arr[i].waiting_time+time;
}
queue->arr[i].waiting_time=queue->arr[i].waiting_time+time;
}
void updateWaitingtime_byNext(Queue *queue, int time)
{
int i;
for (i = queue->front+1; i != queue->rear; i = (i + 1) % MAX_SIZE) {
queue->arr[i].waiting_time=queue->arr[i].waiting_time+time;
}
queue->arr[i].waiting_time=queue->arr[i].waiting_time+time;
}
// Function to display the elements of the queue
void displayQueue_and_waiting(Queue *queue) {
int i;
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return;
}
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
printf("(%d, ", queue->arr[i].id);
printf("%d, ", queue->arr[i].remaining);
printf("%d), ", queue->arr[i].waiting_time);
}
printf("(%d, ", queue->arr[i].id);
printf("%d, ", queue->arr[i].remaining);
printf("%d) \n\n", queue->arr[i].waiting_time);
}
void interrupt_Waitingtime(Queue *queue, int time)
{
int i;
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
queue->arr[i].interrupttime=queue->arr[i].interrupttime-time;
}
queue->arr[i].interrupttime=queue->arr[i].interrupttime-time;
}
void displayQueue_and_interrupt(Queue *queue) {
int i;
if (isEmpty(queue)) {
printf("Wait Queue is empty.\n\n");
return;
}
printf("Wait Queue(id, waiting_time, interrupt_time): ");
for (i = queue->front; i != queue->rear; i = (i + 1) % MAX_SIZE) {
printf("(%d, ", queue->arr[i].id);
printf("%d, ", queue->arr[i].waiting_time);
printf("%d), ", queue->arr[i].interrupttime);
}
printf("(%d, ", queue->arr[i].id);
printf("%d, ", queue->arr[i].waiting_time);
printf("%d) \n", queue->arr[i].interrupttime);
}