Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:c++ 2 курс / 10 вариант 3
.txt#include <iostream>
#include <stdlib.h>
struct elem { // структура элемент списка
int data; // число, которое в нём хранится
elem* next; // указатель на следующий элемент
int index; // индекс этого элемента
};
struct list { // сам список
elem* head; // его начало
elem* tail; // его конец
};
void init(list* lst) { // инициализация списка
lst->head = lst->tail = NULL; // голова это хвост и они пустые
}
bool empty(list* lst) { // проверка на пустоту
if (lst->head == NULL) { // если голова пустая - списка нет
return true;
}
else {
return false;
}
}
void addToTail(list* lst, elem* el) { // добавить элемент в конец списка
if (!empty(lst)) { // если он не пуст
el->next = NULL; // указываем, что он последний
el->index = lst->tail->index + 1; // индекс его равен индексу предыдущего плюс 1
lst->tail->next = el; // после элемента, который был последним встает текущий
lst->tail = el; // он сам становится последним
}
else { // если же список пуст
el->index = 0; // первый элемент - индекс 0
el->next = NULL; // следующего нету
lst->head = lst->tail = el; // он же начало и он же конец
}
}
void printList(list *lst) { // вывод на экран
elem* cur = lst->head; // берем начало и от него ходим
while (cur != NULL) { // пока не достигнем конца списка
std::cout<<"Data: "<<cur->data<<" Index: ["<<cur->index<<"]"<<std::endl;
cur = cur->next; // двигаем указатель на следующий элемент
}
}
void deleteLast(list* lst) { // удаление последнего
elem* cur = lst->head; // берем начало и от него ходим
while (cur != NULL) { // пока не достигнем конца списка
if (cur->next == lst->tail) { // если следующий - хвост
cur->next = NULL; // указываем, что за ним ничего нет
lst->tail = cur; // он становится хвостом
}
cur = cur->next; // двигаем указатель на следующий
}
}
int main() {
list* _lst; // объявили список
init(_lst); // проинициализировали его
int n = 0;
std::cout<<"Enter number of list elements: ";
std::cin>>n; // ввод кол-ва вводимых элементов
for (int i = 0; i < n; i++) {
elem* elm = new elem; // под каждый новый элемент выделяется память
std::cout<<"enter data: ";
std::cin>>elm->data; // вводится его значение
addToTail(_lst, elm); // и добавляется в конец списка
}
std::cout<<"List"<<std::endl;
printList(_lst); // вывод всего списка
std::cout<<"Delete last from list"<<std::endl;
deleteLast(_lst); // удаление последнего добавленного
printList(_lst); // вывод после удаления
system("pause");
return 0;
}