Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 0 0
  1. // listptr.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <stdlib.h>
  7.  
  8.  
  9. using namespace std;
  10.  
  11.  
  12. struct Node
  13. {
  14. int x;
  15. Node *Next;
  16. };
  17.  
  18. class List
  19. {
  20. Node *Head, *Tail; //Первый элемент и тот что последний
  21. int size; //Число элементов в списке
  22. public:
  23. List() :Head(NULL), Tail(NULL), size(0) {}; //Инициализация элементов в ноль с помощью конструктора
  24. ~List(); //Деструктор для освобождения памяти
  25. void Add(int x); //Функция добавления элементов в списов
  26. void Show(int size); //Функция отображения элементов списка
  27. void Remove( int n);
  28. int Count(); //Функция возвращающая число элементов в списке
  29. };
  30.  
  31. List::~List()
  32. {
  33. while (size != 0) //Пока размерность списка не станет нулевой
  34. {
  35. Node *temp = Head->Next;
  36. delete Head; //Освобождаем память от активного элемента
  37. Head = temp; //Смена адреса начала на адрес следующего элемента
  38. size--; //Один элемент освобожден. корректируем число элементов
  39. }
  40. }
  41.  
  42. int List::Count()
  43. {
  44. return size; //Возвращаем число элементов списка
  45. }
  46.  
  47. void List::Add(int x)
  48. {
  49. size++; //При каждом добавлении элемента увеличиваем число элементов в списке
  50. Node *temp = new Node; //Выделение памяти для нового элемента списка
  51. temp->Next = Head; //Замыкание контура. Последний элемент - это начало списка
  52. temp->x = x; //Записываем в выделенную ячейку памяти значение x
  53.  
  54. if (Head != NULL) //В том случае если список не пустой
  55. {
  56. Tail->Next = temp; //Запись данных в следующее за последним элементом поле
  57. Tail = temp; //Последний активный элемент=только что созданный.
  58. }
  59. else Head = Tail = temp;//Если список пуст то создается первый элемент.
  60. }
  61.  
  62.  
  63.  
  64. void List::Remove(int n)
  65. {
  66. Node *temp = Head, *prev = NULL;
  67. int i = 0;
  68. while (temp && i<n)
  69. {
  70. i++;
  71. prev = temp; // Запоминаем предыдущий в цепочке
  72. temp = temp->Next;
  73. }
  74. if (!temp) // Элемент не найден
  75. {
  76. return;
  77. }
  78. if (Head == temp)
  79. {
  80. Head = temp->Next;
  81. }
  82. else
  83. {
  84. if (prev) prev->Next = temp->Next;
  85. }
  86. //cout << "Удаляемый элемент: " << *temp;
  87. size--;
  88. delete(temp);
  89.  
  90. }
  91.  
  92. void List::Show(int temp)
  93. {
  94. Node *tempHead = Head; //Указываем на голову
  95.  
  96. temp = size; //Временная переменная равная числу элементов в списке
  97. while (temp != 0) //Пока не выполнен признак прохода по всему списку
  98. {
  99. cout << tempHead->x << " "; //Очередной элемент списка на экран
  100. tempHead = tempHead->Next; //Указываем, что нужен следующий элемент
  101. temp--; //Один элемент считан, значит осталось на один меньше
  102. }
  103. }
  104.  
  105. void main()
  106. {
  107. List lst;
  108.  
  109. int n, k=0 ;
  110. cout << "Enter the number of children:" << endl;
  111. cin >> n;
  112.  
  113. for (int i = 0; i < n; i++)
  114. {
  115. lst.Add(i);
  116. }
  117.  
  118. //k = n;
  119. lst.Show(lst.Count()); //Показываем список на экране.
  120.  
  121.  
  122.  
  123. cout << endl;
  124.  
  125. for (int i = 0; i < n; i++)
  126. {
  127. k++;
  128. if (k == 3)
  129. {
  130. lst.Remove(i);
  131. k = 0;
  132. }
  133. //n--;
  134. }
  135.  
  136. for (int i = 0; i < n; i++)
  137. {
  138.  
  139.  
  140. }
  141.  
  142.  
  143. /*while (n != 1)
  144. {
  145.  
  146. lst.Remove(k);
  147. n--;
  148. }*/
  149.  
  150.  
  151. lst.Show(lst.Count()); //Показываем список на экране.
  152.  
  153.  
  154.  
  155. cout << endl;
  156. system("PAUSE");
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement