#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;
}
}
}