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