Advertisement
Guest User

laba3

a guest
Feb 19th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. struct Node
  7. {
  8. char data; // Данные.
  9. Node* Next, * Prev; // Указатели на следующий и предыдущий элементы.
  10. };
  11.  
  12. class StackList {
  13. private:
  14. long int stackSize = 0;
  15. vector<char> stack;
  16. Node* Head, * Tail;
  17.  
  18. // добавление элемента в список
  19. void Add(char data)
  20. {
  21. Node* temp = new Node; // Создаем новый элемент.
  22. temp->Next = temp->Prev = NULL; // Обнуляем его указатель на следующий.
  23. temp->data = data; // Записываем данные.
  24. if (Head != NULL)
  25. {
  26. temp->Prev = Tail;
  27. Tail->Next = temp;
  28. Tail = temp;
  29. }
  30. else
  31. {
  32. temp->Prev = NULL;
  33. Head = Tail = temp;
  34. }
  35. }
  36.  
  37. public:
  38. // конструктор
  39. StackList() {
  40. Head = NULL;
  41. Tail = NULL;
  42. };
  43. // конструктор для перегрузки
  44. StackList(vector<char> vec, Node* Head, Node* Tail) {
  45. this->stack = vec;
  46. this->stackSize = vec.size() - 1;
  47. this->Head = Head;
  48. this->Tail = Tail;
  49. };
  50. // деструктор
  51. ~StackList() {
  52. stack.clear();
  53. };
  54.  
  55. // функция добавления элемента без перегрузки
  56. void addElem(char ch) {
  57. stack.push_back(ch);
  58. stackSize++;
  59. Add(ch);
  60. };
  61.  
  62.  
  63.  
  64. friend const StackList& operator--(StackList& stackList, int);
  65.  
  66.  
  67. // функция добавления элемента с перегрузкой
  68. StackList& operator+=(char ch) {
  69. this->stack.push_back(ch);
  70. this->Add(ch);
  71. this->stackSize++;
  72. return *this;
  73. }
  74.  
  75. // чтение по индексу
  76. char read(int i) {
  77. if (i >= this->stackSize) {
  78. cout << "ERROR";
  79. return '\0';
  80. }
  81. return stack[i];
  82. };
  83.  
  84. // поиск по символу
  85. void search(char ch) {
  86. if (stack.size() == 0) {
  87. cout << "EMPTY ELEMENTES NET UHADI" << endl;
  88. }
  89. else {
  90. int c = 0;
  91. for (int i = 0; i < stack.size(); i++) {
  92. if (ch == stack[i]) {
  93. c++;
  94.  
  95. }
  96. }
  97. cout << "кол-во элементов "<< c << endl;
  98. }
  99. };
  100.  
  101. // составление слова
  102. string getWord(int n) {
  103. string str = "";
  104. for (int i = 0; i < stack.size(); i += n) {
  105. str += stack[i];
  106. }
  107. return str;
  108. };
  109.  
  110. void delListElem() {
  111.  
  112. if (stack.size() == 0) {
  113.  
  114. Head = NULL;
  115. Tail = NULL;
  116.  
  117. }
  118. else if (Head->Next == NULL) {
  119. Head = NULL;
  120.  
  121. }
  122. else {
  123. Node* del = Head;
  124. for (int i = 0; i < stack.size() - 2; i++) {
  125. del = del->Next;
  126.  
  127. }
  128.  
  129. del->Next = NULL;
  130.  
  131.  
  132. Tail = del;
  133.  
  134. Tail->Next = NULL;
  135. }
  136. }
  137.  
  138. // печать
  139. void printData() {
  140. if (stack.size() == 0) {
  141.  
  142. }
  143. else {
  144. for (int i = 0; i < stack.size(); i++) {
  145. cout << stack[i];
  146. }
  147. }
  148. cout << endl;
  149. }
  150. };
  151.  
  152. // перегрузка удаления элемента из списка/стека
  153. const StackList& operator--(StackList& stackList, int) {
  154. if (stackList.stack.size() != 0) {
  155. stackList.stack.pop_back();
  156. stackList.delListElem();
  157. return StackList(stackList.stack, stackList.Head, stackList.Tail);
  158. }
  159. return StackList(stackList.stack, NULL, NULL);
  160. };
  161. void addElems( StackList &l) {
  162. string s;
  163. cin >> s;
  164. for (int i = 0; i < s.size(); i++) {
  165. l.addElem(s[i]);
  166. }
  167.  
  168. }
  169.  
  170. int main()
  171. {
  172. StackList s;
  173.  
  174.  
  175. setlocale(LC_ALL, "Russian");
  176.  
  177.  
  178. int t ;
  179.  
  180. do {
  181.  
  182.  
  183.  
  184.  
  185.  
  186. cout << "1) Добавить\n2) Удалить\n3) поиск\n4) составление слова\n5) удаление структуры \n";
  187.  
  188. cin >> t;
  189.  
  190. switch (t) {
  191.  
  192. case 1: {addElems(s);
  193. s.printData();
  194. break;
  195.  
  196. }
  197.  
  198. case 2:s--; break;
  199.  
  200.  
  201.  
  202. case 3:s.search('s'); break;
  203.  
  204. case 4:cout<<
  205. s.getWord(2) << endl; break;
  206.  
  207. }
  208.  
  209. } while (t <= 4);
  210.  
  211. return 0;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement