-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlink_list.c
65 lines (56 loc) · 1.46 KB
/
link_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
#include "link_list.h"
void InitQueue(list_t *queue) {
int i;
for (i = 0;i<3;i++) {
TCB *head = (TCB*)calloc(1,sizeof(TCB));
head->state = kFake;
head->next_tcb = NULL;
queue[i].head = head;
queue[i].have_node = false;
}
}
void InsertTailNode(list_t *queue, TCB *node) {
if (!queue[node->current_priority].have_node) {
queue[node->current_priority].head->next_tcb = node;
queue[node->current_priority].have_node = true;
} else{
queue[node->current_priority].tail->next_tcb = node;
}
queue[node->current_priority].tail = node;
queue[node->current_priority].tail->next_tcb = NULL;
}
TCB *CutNode(list_t *queue, TCB **node) {
register TCB *cut = (*node);
(*node) = (cut->next_tcb);
if(!(queue[cut->current_priority].head->next_tcb)){
queue[cut->current_priority].have_node = false;
queue[cut->current_priority].head->next_tcb = NULL;
queue[cut->current_priority].tail = NULL;
}
GetTailNode(queue, cut->current_priority);
cut->next_tcb = NULL;
return cut;
}
void GetTailNode(list_t *queue, int priority) {
register TCB *ptr;
register TCB *tmp = NULL;
ptr = queue[priority].head->next_tcb;
while (ptr) {
tmp = ptr;
ptr = ptr->next_tcb;
}
queue[priority].tail = tmp;
}
TCB **FindNode(list_t *queue, char *job_name) {
int i;
register TCB **ptr;
for (i = 0; i < 3; i++) {
ptr = &(queue[i].head->next_tcb);
while (*ptr) {
if (strcmp((*ptr)->job_name,job_name) == 0)
return ptr;
ptr = &((*ptr)->next_tcb);
}
}
return NULL;
}