-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpriorityQueueFile.c
More file actions
70 lines (59 loc) · 1.6 KB
/
Copy pathpriorityQueueFile.c
File metadata and controls
70 lines (59 loc) · 1.6 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
//
// stackFile.c
// fileDistance
//
// Created by Alessandra Lerteri Caroletta on 22/09/20.
//
#include "priorityQueueFile.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Questa funzione viene richiamata dalla funzione ENQUEUENODE per allocare la memoria necessaria a contenere un nuovo nodo della coda.
*/
queueFile *newNodeFile(){
queueFile *queueNode =(queueFile*)malloc(sizeof(queueFile));
queueNode->distance = 0;
queueNode->path = (char*) malloc(sizeof(char));
queueNode->next = NULL;
return queueNode;
}
/*
Questa funzione viene richiamata da ENQUEUENODE per inserire il nodo nella giusta posizione.
*/
void insertNode(queueFile **root, queueFile *newNode){
queueFile *head = *root;
if(checkEmptyQueue(*root)){
*root = newNode;
return;
}
if(head->distance > newNode->distance){
newNode->next = *root;
*root = newNode;
}else{
while(head->next != NULL && head->next->distance < newNode->distance)
head = head->next;
newNode->next = head->next;
head->next = newNode;
}
}
void enqueueFile(queueFile **root, char *path, unsigned int distance){
queueFile *newNode = newNodeFile();
newNode->distance = distance;
newNode->path = realloc(newNode->path, strlen(path));
newNode->path = path;
insertNode(root, newNode);
}
void dequeueFile(queueFile **root){
queueFile *tmp = *root;
if(!checkEmptyQueue(*root)){
*root = (*root)->next;
free(tmp);
}
}
int checkEmptyQueue(queueFile *root){
if(root!=NULL){
return 0;
}
return 1;
}