Advertisement
Guest User

Untitled

a guest
May 24th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<string>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. ifstream go("in.txt");
  9. ofstream out("out.txt");
  10.  
  11. //#include "List.cpp"
  12. template <class Item>
  13. class List
  14. {
  15. struct Element
  16. {
  17. Item inf;
  18. Element* next;
  19. Element(Item x) :inf(x), next(0)
  20. {
  21. }
  22. };
  23.  
  24. Element* head; //указатель на начало списка
  25. int size; // количество элементов в списке
  26.  
  27. //возвращает указатель на элемент списка с номером index
  28. Element* Find(int index)
  29. {
  30. if ((index < 1) || (index > size)) //если индекс элемента списка
  31. { // находится вне диапазона, то
  32. return nullptr; // возвращаем nullptr
  33. }
  34. else //иначе
  35. {
  36. //устанавливаем указатель на начало списка
  37. Element* cur = head;
  38. for (int i = 1; i < index; i++) // и перемещаемся по списку
  39. { // на элемент с номером index
  40. cur = cur->next;
  41. }
  42. return cur; //возвращаем указатель на требуемый элемент
  43. }
  44. }
  45.  
  46. public:
  47. List() :head(0), size(0) //конструктор класса
  48. {
  49. }
  50.  
  51. ~List() //деструктор класса
  52. {
  53. while (!Empty()) //пока список не пуст
  54. {
  55. Remove(1); //удаляем первый элемент списка
  56. }
  57. }
  58.  
  59. bool Empty() //проверка пустоты списка
  60. {
  61. return head == 0;
  62. }
  63.  
  64. int GetLength() //возвращает количество элементов в списке
  65. {
  66. return size;
  67. }
  68.  
  69. //возвращает значение элемента списка по его номеру
  70. Item Get(int index)
  71. {
  72. if ((index < 1) || (index > size))
  73. {
  74. std::cout << "Error";
  75. }
  76. else
  77. {
  78. Element* r = Find(index);
  79. Item i = r->inf;
  80. return i;
  81. }
  82. }
  83.  
  84. //осуществляет вставку элемента со значением data в позицию index
  85. void Insert(int index, Item data)
  86. {
  87. if ((index < 1) || (index > size + 1))
  88. {
  89. std::cout << "Error";;
  90. }
  91. else
  92. {
  93. //создаем новый элемент
  94. Element* newPtr = new Element(data);
  95. size = GetLength() + 1; //увеличиваем размерность списка
  96. if (index == 1) //если вставку производим в позицию 1
  97. { //то см. рис. 16.6
  98. newPtr->next = head;
  99. head = newPtr;
  100. }
  101. else //иначе см. рис.16.7
  102. {
  103. Element* prev = Find(index - 1);
  104. newPtr->next = prev->next;
  105. prev->next = newPtr;
  106. }
  107. }
  108. }
  109.  
  110. //осуществляет удаление элемента из списка с номером index
  111. void Remove(int index)
  112. {
  113. if ((index < 1) || (index > size))
  114. {
  115. std::cout << "Error";;
  116. }
  117. else
  118. {
  119. Element* cur; //объявляем вспомогательный указатель --size; //уменьшаем размерность списка
  120. if (index == 1) //если удаляем первый элемент
  121. { //то см. рис. 16.8
  122. cur = head;
  123. head = head->next;
  124. }
  125. else //иначе см. рис.16.9
  126. {
  127. Element* prev = Find(index - 1);
  128. cur = prev->next;
  129. prev->next = cur->next;
  130. }
  131. cur->next = nullptr;
  132. delete cur;
  133. }
  134. }
  135.  
  136. //вывод элементов списка в глобальный поток out
  137. void Print()
  138. {
  139. for (Element* cur = head; cur != nullptr; cur = cur->next)
  140. {
  141. out << cur->inf << ' ';
  142. }
  143. out << std::endl;
  144. }
  145. };
  146.  
  147.  
  148. void main() {
  149.  
  150. string word;
  151. char symbol;
  152. int count = 1;
  153. cout << "Vvedite symbol";
  154.  
  155. cin >> symbol;
  156. List<string>list_word;//создаем список
  157. while (go >> word){//пока не конец файла собираем слова
  158. list_word.Insert(count, word);
  159. count++;//вставляем их в первый список в его конец (list_word.GetLength())
  160. }
  161. count = 1;
  162. List<string>list_word_copy;//создаем второй список под слова
  163. for (int i = 1; i <= list_word.GetLength(); i++) {
  164.  
  165. word = list_word.Get(i); //берем слово, тут они не удаляються как встеке и очереди, просто беруться
  166. if(word[0] == symbol) {
  167. list_word_copy.Insert(count, word); //если слово нужное вставляем его в конец второго списка
  168. //list_word.Remove(i); //удалем из первого списка слово
  169. //i--;
  170. count++;
  171. }
  172. }
  173.  
  174.  
  175. list_word.Print();//выводим первый список в файл
  176. out << endl;
  177. list_word_copy.Print();//выводим второй список в файл
  178.  
  179. out.close();
  180. go.close();
  181. system("pause");
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement