Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // listptr.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- struct Node
- {
- int x;
- Node *Next;
- };
- class List
- {
- Node *Head, *Tail; //Первый элемент и тот что последний
- int size; //Число элементов в списке
- public:
- List() :Head(NULL), Tail(NULL), size(0) {}; //Инициализация элементов в ноль с помощью конструктора
- ~List(); //Деструктор для освобождения памяти
- void Add(int x); //Функция добавления элементов в списов
- void Show(int size); //Функция отображения элементов списка
- void Remove( int n);
- int Count(); //Функция возвращающая число элементов в списке
- };
- List::~List()
- {
- while (size != 0) //Пока размерность списка не станет нулевой
- {
- Node *temp = Head->Next;
- delete Head; //Освобождаем память от активного элемента
- Head = temp; //Смена адреса начала на адрес следующего элемента
- size--; //Один элемент освобожден. корректируем число элементов
- }
- }
- int List::Count()
- {
- return size; //Возвращаем число элементов списка
- }
- void List::Add(int x)
- {
- size++; //При каждом добавлении элемента увеличиваем число элементов в списке
- Node *temp = new Node; //Выделение памяти для нового элемента списка
- temp->Next = Head; //Замыкание контура. Последний элемент - это начало списка
- temp->x = x; //Записываем в выделенную ячейку памяти значение x
- if (Head != NULL) //В том случае если список не пустой
- {
- Tail->Next = temp; //Запись данных в следующее за последним элементом поле
- Tail = temp; //Последний активный элемент=только что созданный.
- }
- else Head = Tail = temp;//Если список пуст то создается первый элемент.
- }
- void List::Remove(int n)
- {
- Node *temp = Head, *prev = NULL;
- int i = 0;
- while (temp && i<n)
- {
- i++;
- prev = temp; // Запоминаем предыдущий в цепочке
- temp = temp->Next;
- }
- if (!temp) // Элемент не найден
- {
- return;
- }
- if (Head == temp)
- {
- Head = temp->Next;
- }
- else
- {
- if (prev) prev->Next = temp->Next;
- }
- //cout << "Удаляемый элемент: " << *temp;
- size--;
- delete(temp);
- }
- void List::Show(int temp)
- {
- Node *tempHead = Head; //Указываем на голову
- temp = size; //Временная переменная равная числу элементов в списке
- while (temp != 0) //Пока не выполнен признак прохода по всему списку
- {
- cout << tempHead->x << " "; //Очередной элемент списка на экран
- tempHead = tempHead->Next; //Указываем, что нужен следующий элемент
- temp--; //Один элемент считан, значит осталось на один меньше
- }
- }
- void main()
- {
- List lst;
- int n, k=0 ;
- cout << "Enter the number of children:" << endl;
- cin >> n;
- for (int i = 0; i < n; i++)
- {
- lst.Add(i);
- }
- //k = n;
- lst.Show(lst.Count()); //Показываем список на экране.
- cout << endl;
- for (int i = 0; i < n; i++)
- {
- k++;
- if (k == 3)
- {
- lst.Remove(i);
- k = 0;
- }
- //n--;
- }
- for (int i = 0; i < n; i++)
- {
- }
- /*while (n != 1)
- {
- lst.Remove(k);
- n--;
- }*/
- lst.Show(lst.Count()); //Показываем список на экране.
- cout << endl;
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement