Skip to content

Commit c8cd7c6

Browse files
authored
implemented linked list in cpp (tested) (#260)
implemented linked list in cpp (tested)
2 parents c026996 + e9068cc commit c8cd7c6

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

Structures/LinkedList.cpp

+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
#include <stdlib.h>
2+
#include <cassert>
3+
#include <cstdio>
4+
5+
void append(int element);
6+
void clear(void);
7+
int max(void);
8+
int get(unsigned int position);
9+
void remove_element(unsigned int position);
10+
11+
struct Node
12+
{
13+
int value;
14+
struct Node* next;
15+
};
16+
17+
static struct Node* head = 0;
18+
19+
void append(int element)
20+
{
21+
if (!head)
22+
{
23+
head = (struct Node*)malloc(sizeof(struct Node));
24+
head->value = element;
25+
head->next = 0;
26+
}
27+
else
28+
{
29+
struct Node* iterator = head;
30+
while (iterator->next != 0)
31+
iterator = iterator->next;
32+
33+
iterator->next = (struct Node*)malloc(sizeof(struct Node));
34+
iterator->next->value = element;
35+
iterator->next->next = 0;
36+
}
37+
}
38+
39+
void clear(void)
40+
{
41+
if (head == 0)
42+
return;
43+
44+
struct Node* iterator = head;
45+
struct Node* iterator2;
46+
while (iterator != 0)
47+
{
48+
iterator2 = iterator->next;
49+
free(iterator);
50+
iterator = iterator2;
51+
}
52+
head = 0;
53+
}
54+
55+
int max(void)
56+
{
57+
int max = 0;
58+
for (struct Node* iterator = head; iterator; iterator = iterator->next)
59+
if (iterator->value > max)
60+
max = iterator->value;
61+
62+
return max;
63+
}
64+
65+
66+
int get(unsigned int position)
67+
{
68+
struct Node* iterator = head;
69+
for (int i = 0; i < position; i++)
70+
{
71+
if (!iterator || !iterator->next)
72+
return 0;
73+
74+
iterator = iterator->next;
75+
}
76+
77+
return iterator->value;
78+
}
79+
80+
void remove_element(unsigned int position)
81+
{
82+
struct Node* iterator = head;
83+
struct Node* prev_iterator = head;
84+
for (int i = 0; i < position; i++)
85+
{
86+
if (!iterator || !iterator->next)
87+
return;
88+
89+
prev_iterator = iterator;
90+
iterator = iterator->next;
91+
}
92+
93+
if(position == 0)
94+
{
95+
head = iterator->next;
96+
free(iterator);
97+
}
98+
else
99+
{
100+
iterator = iterator->next;
101+
free(prev_iterator->next);
102+
prev_iterator->next = iterator;
103+
}
104+
}
105+
106+
/////////
107+
//TESTS//
108+
/////////
109+
110+
void max_of_one_element_is_same_element(void)
111+
{
112+
append(5);
113+
assert(max() == 5);
114+
clear();
115+
}
116+
117+
void max_of_three_elements(void)
118+
{
119+
append(3);
120+
append(5);
121+
append(2);
122+
assert(max() == 5);
123+
clear();
124+
}
125+
126+
void get_returns_element_in_position(void)
127+
{
128+
append(3);
129+
append(5);
130+
append(7);
131+
assert(get(2) == 7);
132+
assert(get(0) == 3);
133+
assert(get(500) == 0);
134+
clear();
135+
}
136+
137+
void erasing_elements(void)
138+
{
139+
append(3);
140+
append(5);
141+
append(7);
142+
remove_element(1);
143+
assert(get(0) == 3);
144+
assert(get(1) == 7);
145+
assert(get(2) == 0);
146+
clear();
147+
}
148+
149+
150+
int main (void)
151+
{
152+
max_of_one_element_is_same_element();
153+
max_of_three_elements();
154+
get_returns_element_in_position();
155+
erasing_elements();
156+
printf("All tests passed!\r\n");
157+
}

0 commit comments

Comments
 (0)