LABA_2

  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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <stdio.h>
#include <conio.h>
#include <locale.h>
class List{
private:
struct elem{
float value;
struct elem *next;
};
struct elem *first=0, *cur=0;
int count = 0;
public:
List(float value){
first = new elem;
first->value = value;
first->next = 0;
count++;
}
List(){}
~List(){
for(int i=count-1; i>=0; i--){
remove(i);
}
}
void add(int item, float value){
struct elem *prev=0;
if(item > count+1){ return; } //надо бросать исключение
cur = first;
for(int i=0; i<item; i++){
prev = cur;
cur = cur->next;
}
if(prev!=0){
prev->next = new elem;
prev->next->next = cur;
prev->next->value = value;
} else {
first = new elem;
first->next = cur;
first->value = value;
}
count++;
}
void addFirst(float value){
add(0, value);
}
void addLast(float value){
add(count, value);
}
void remove(int item){
struct elem *prev=0;
if(item > count){ return; } //надо бросать исключение
cur = first;
for(int i=0; i<item; i++){
prev = cur;
cur = cur->next;
}
if(prev!=0){
prev->next = cur->next;
delete cur;
} else {
first = cur->next;
delete cur;
}
count--;
}
void removeFirst(){
remove(0);
}
void removeLast(){
remove(count-1);
}
float getElement(int item){
if(item >count){ return 0; } //надо бросать исключение
cur = first;
for(int i=0; i<item; i++){
cur = cur->next;
}
return cur->value;
}
void setElement(int item, float value){
if(item >count){ return; } //надо бросать исключение
cur = first;
for(int i=0; i<item; i++){
cur = cur->next;
}
cur->value = value;
}
int getCount(){
return count;
}
void removeAt(float value){
for(int i=0; i<count; i++){
if(getElement(i) == value){
remove(i);
}
}
}
void print(){
if(count==0){
printf("List is empty\n");
}
for(int i=0; i<count; i++){
printf("List[%i] = %f\n", i, getElement(i));
}
}
};
int main() {
setlocale(LC_ALL, "RUSSIAN");
List list;
float value;
int select, item;
while(1){
printf("\n==============\n");
printf("Выберите действие:");
printf("\n 1.добавление элемента в начало списка;");
printf("\n 2.удаление элемента из начала списка;");
printf("\n 3.добавление элемента в список на указанную позицию K;");
printf("\n 4.удаление элемента из списка, находящегося на позиции K;");
printf("\n 5.добавление элемента в конец списка;");
printf("\n 6.удаление элемента на конце списка;");
printf("\n 7.Отобразить элементы списка на экране.");
printf("\n 8.Удаление из списка всех вхождений заданного числа");
printf("\n==> ");
scanf("%i", &select);
printf("\n==============\n");
switch(select){
case 1:
printf("Введите значение элемента: ");
scanf("%f", &value);
list.addFirst(value);
break;
case 2:
list.removeFirst();
break;
case 3:
printf("Введите значение элемента: ");
scanf("%f", &value);
printf("Введите позицию К: ");
scanf("%i", &item);
list.add(item, value);
break;
case 4:
printf("Введите позицию К: ");
scanf("%i", &item);
list.remove(item);
break;
case 5:
printf("Введите значение элемента: ");
scanf("%f", &value);
list.addLast(value);
break;
case 6:
list.removeLast();
break;
case 7:
list.print();
break;
case 8:
printf("Введите значение элемента: ");
scanf("%f", &value);
list.removeAt(value);
break;
default:
return 0;
}
}
}