-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlinkedList.h
139 lines (122 loc) · 2.65 KB
/
linkedList.h
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
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
struct list_node_s
{
int data;
struct list_node_s *next;
};
int16_t RandomIntegerGenerator();
void DisplayStatistics(const char* label, int count, int countPerThread);
void Populate(struct list_node_s *head_p, int n);
void Display(struct list_node_s *head_p);
int Member(int value, struct list_node_s **head_p)
{
struct list_node_s *curr_p = *head_p;
while (curr_p != NULL && curr_p->data < value)
{
curr_p = curr_p->next;
}
if (curr_p == NULL || curr_p->data > value)
{
return 0;
}
else
{
return 1;
}
}
int Insert(int value, struct list_node_s **head_pp)
{
struct list_node_s *curr_p = *head_pp;
struct list_node_s *pred_p = NULL;
struct list_node_s *temp_p;
while (curr_p != NULL && curr_p->data < value)
{
pred_p = curr_p;
curr_p = curr_p->next;
}
if (curr_p == NULL || curr_p->data > value)
{
temp_p = malloc(sizeof(struct list_node_s));
temp_p->data = value;
temp_p->next = curr_p;
if (pred_p == NULL)
{
*head_pp = temp_p;
}
else
{
pred_p->next = temp_p;
}
return 1;
}
else
{
return 0;
}
}
int Delete(int value, struct list_node_s **head_pp)
{
struct list_node_s *curr_p = *head_pp;
struct list_node_s *pred_p = NULL;
while (curr_p != NULL && curr_p->data < value)
{
pred_p = curr_p;
curr_p = curr_p->next;
}
if (curr_p != NULL && curr_p->data == value)
{
if (pred_p == NULL)
{
*head_pp = curr_p->next;
}
else
{
pred_p->next = curr_p->next;
}
free(curr_p);
return 1;
}
else
{
return 0;
}
}
void Populate(struct list_node_s *head_p, int n)
{
int i = 0;
while (i < n - 1)
{
int16_t value = RandomIntegerGenerator();
if (Member(value, &head_p))
{
continue;
}
Insert(value, &head_p);
i++;
}
}
void Display(struct list_node_s *head_p)
{
struct list_node_s *curr_p = head_p;
int i = 0;
while (curr_p != NULL)
{
printf("Node %d: %d\n", i, curr_p->data);
i++;
curr_p = curr_p->next;
}
}
void DisplayStatistics(const char *label, int count, int countPerThread)
{
printf("%s:\n", label);
printf("Total: %d\n", count);
printf("Per Thread: %d\n", countPerThread);
}
int16_t RandomIntegerGenerator()
{
int16_t max_value = __INT16_MAX__;
int16_t value = rand() % (max_value + 1);
return value;
}