-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueue.c
More file actions
73 lines (63 loc) · 1.32 KB
/
queue.c
File metadata and controls
73 lines (63 loc) · 1.32 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
#include "queue.h"
#include <stdlib.h>
#include <stdio.h>
/* Implementera interface från queue.h här */
QueuePtr new_queue(){ // Skapar en ny (tom) kö
QueuePtr result = malloc(sizeof(struct QueueElement));
if(result == NULL) return NULL;
result->data = 0;
result->prio = 0;
result->next = NULL;
return result;
}
int size(QueuePtr q){
int size = 0;
QueuePtr temp = q;
while (temp->next) {
size++;
temp = temp->next;
}
return size;
}
void add(QueuePtr q, int prio, DataPtr d) {
QueuePtr meow = q;
QueuePtr res = malloc(sizeof(struct QueueElement));
res->prio = prio;
res->data = d;
while(meow->next && prio <= (meow->next->prio)){
meow = meow->next;
}
if(meow->next){
QueuePtr nextAfter = meow->next;
res->next = nextAfter;
meow->next = res;
}else{
meow->next = res;
res->next = 0;
}
}
DataPtr get_first(QueuePtr q){
if(!q->next) return NULL;
return q->next->data;
}
void remove_first(QueuePtr q){
QueuePtr first = q->next;
if(first == NULL) return;
q->next = q->next->next;
free(first);
}
void clear(QueuePtr q){
QueuePtr next, deleteMe;
deleteMe = q; //HEAD
while(deleteMe){
next = deleteMe->next;
free(deleteMe);
deleteMe = next;
}
q->next = NULL;
}
void delete_queue(QueuePtr q){
clear(q);
free(q->next);
free(q);
}