Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e9068cc

Browse files
committed
implemented linked list in cpp (tested)
1 parent 1f9fb6d commit e9068cc

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

‎Structures/LinkedList.cpp‎

Lines changed: 157 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /