-
Notifications
You must be signed in to change notification settings - Fork 0
/
linkedlist.c
98 lines (73 loc) · 2.65 KB
/
linkedlist.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
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
#include "linkedlist.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void duplicate_insert(struct unique * current, char* newpath, int numberofduplicates)
/* places a duplicate at end for a given unique node and then allocates space in memory for a new node to be formed */
{
struct duplicate * new_node = NULL;
new_node = (struct duplicate*) malloc(sizeof(struct duplicate));
if (!numberofduplicates) {
current -> copy = new_node; //new node is made head of linkedlist
}
else
{
struct duplicate * duplicate_node = current ->copy;
while (duplicate_node -> dcopy != NULL)//iterates until no more copies left
{
duplicate_node = duplicate_node ->dcopy;
}
duplicate_node ->dcopy = new_node;
}
new_node ->dcopy = NULL;
new_node ->path = newpath;
}
void insert_list(char*name, char* hash,char*path ,int memory,struct unique* head, int* hasduplicates)
{
char* newpath = malloc(strlen(path+1)); //string for reformatting path
if(newpath != NULL)
strcpy(newpath, path); //'newpath' is destination array where string 'path' is being copied to
struct unique* new_node = NULL; //forms a new node
new_node = (struct unique*) malloc(sizeof(struct unique)); //memory allocation
struct unique *current = NULL;
if (head->next == NULL) //gives value held by 'next' to head and checks that that's null
{
head ->name = "head";
head ->hash = "head";
head ->path = "head";
head ->next = new_node;
head ->memory = 0;
head ->n_dups = 0;
head ->copy = NULL;
current = head;
}
else
{
current = head;
while (1)
{
if (!strcmp(current -> hash, hash)) // should the hash be the same with the hash's of the other current nodes, add it to duplicates
{
*hasduplicates = 1; //for -q implementation
duplicate_insert(current, newpath,current -> n_dups);
(current -> n_dups)++;
return;
}
if (current ->next == NULL) //if reached the end of the loop break
{
break;
}
current = current->next;
}
}
current->next = new_node;
//newly formed node gets added to the end of the linkedlist
new_node -> name = name;
new_node -> hash = hash;
new_node -> path = newpath;
new_node -> memory = memory;
new_node -> n_dups = 0;
new_node -> copy = NULL;
new_node -> next = NULL;
return;
}