Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct Node
- {
- char data; // Данные.
- Node* Next, * Prev; // Указатели на следующий и предыдущий элементы.
- };
- class StackList {
- private:
- long int stackSize = 0;
- vector<char> stack;
- Node* Head, * Tail;
- // добавление элемента в список
- void Add(char data)
- {
- Node* temp = new Node; // Создаем новый элемент.
- temp->Next = temp->Prev = NULL; // Обнуляем его указатель на следующий.
- temp->data = data; // Записываем данные.
- if (Head != NULL)
- {
- temp->Prev = Tail;
- Tail->Next = temp;
- Tail = temp;
- }
- else
- {
- temp->Prev = NULL;
- Head = Tail = temp;
- }
- }
- public:
- // конструктор
- StackList() {
- Head = NULL;
- Tail = NULL;
- };
- // конструктор для перегрузки
- StackList(vector<char> vec, Node* Head, Node* Tail) {
- this->stack = vec;
- this->stackSize = vec.size() - 1;
- this->Head = Head;
- this->Tail = Tail;
- };
- // деструктор
- ~StackList() {
- stack.clear();
- };
- // функция добавления элемента без перегрузки
- void addElem(char ch) {
- stack.push_back(ch);
- stackSize++;
- Add(ch);
- };
- friend const StackList& operator--(StackList& stackList, int);
- // функция добавления элемента с перегрузкой
- StackList& operator+=(char ch) {
- this->stack.push_back(ch);
- this->Add(ch);
- this->stackSize++;
- return *this;
- }
- // чтение по индексу
- char read(int i) {
- if (i >= this->stackSize) {
- cout << "ERROR";
- return '\0';
- }
- return stack[i];
- };
- // поиск по символу
- void search(char ch) {
- if (stack.size() == 0) {
- cout << "EMPTY ELEMENTES NET UHADI" << endl;
- }
- else {
- int c = 0;
- for (int i = 0; i < stack.size(); i++) {
- if (ch == stack[i]) {
- c++;
- }
- }
- cout << "кол-во элементов "<< c << endl;
- }
- };
- // составление слова
- string getWord(int n) {
- string str = "";
- for (int i = 0; i < stack.size(); i += n) {
- str += stack[i];
- }
- return str;
- };
- void delListElem() {
- if (stack.size() == 0) {
- Head = NULL;
- Tail = NULL;
- }
- else if (Head->Next == NULL) {
- Head = NULL;
- }
- else {
- Node* del = Head;
- for (int i = 0; i < stack.size() - 2; i++) {
- del = del->Next;
- }
- del->Next = NULL;
- Tail = del;
- Tail->Next = NULL;
- }
- }
- // печать
- void printData() {
- if (stack.size() == 0) {
- }
- else {
- for (int i = 0; i < stack.size(); i++) {
- cout << stack[i];
- }
- }
- cout << endl;
- }
- };
- // перегрузка удаления элемента из списка/стека
- const StackList& operator--(StackList& stackList, int) {
- if (stackList.stack.size() != 0) {
- stackList.stack.pop_back();
- stackList.delListElem();
- return StackList(stackList.stack, stackList.Head, stackList.Tail);
- }
- return StackList(stackList.stack, NULL, NULL);
- };
- void addElems( StackList &l) {
- string s;
- cin >> s;
- for (int i = 0; i < s.size(); i++) {
- l.addElem(s[i]);
- }
- }
- int main()
- {
- StackList s;
- setlocale(LC_ALL, "Russian");
- int t ;
- do {
- cout << "1) Добавить\n2) Удалить\n3) поиск\n4) составление слова\n5) удаление структуры \n";
- cin >> t;
- switch (t) {
- case 1: {addElems(s);
- s.printData();
- break;
- }
- case 2:s--; break;
- case 3:s.search('s'); break;
- case 4:cout<<
- s.getWord(2) << endl; break;
- }
- } while (t <= 4);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement