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

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

.txt
Скачиваний:
16
Добавлен:
12.02.2015
Размер:
2.55 Кб
Скачать
#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 курс