Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++ 2 курс / 10 вариант 3

.txt
Скачиваний:
22
Добавлен:
12.02.2015
Размер:
3 Кб
Скачать
#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;
}
Соседние файлы в папке c++ 2 курс