Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include<iostream>
- using namespace std;
- struct stack
- {
- int v; //информационный элемент
- stack *head, *next; //вершина стека и указатель на следующий элемент
- };
- int a1 = 0, a50 = 0;
- struct stack1
- {
- int u; //информационный элемент
- stack1 *head, *next; //вершина стека и указатель на следующий элемент
- };
- struct stack2
- {
- int p; //информационный элемент
- stack2 *head, *next; //вершина стека и указатель на следующий элемент
- };
- void push(int x, stack *MyStk) //Добавление элемента х в стек
- {
- stack* e = new stack; //выделение памяти для нового элемента
- e->v = x; //запись элемента x в поле v
- e->next = MyStk->head; //перенос вершины на следующий элемент
- MyStk->head = e; //сдвиг вершины на позицию вперед
- }
- void div(stack *MyStk, stack1 *MyStk1, stack2 *MyStk2)
- {
- stack1* h = new stack1; //выделение памяти для нового элемента
- stack2* t = new stack2;
- int a;
- stack* e = MyStk->head; //объявляется указатель на вершину стека
- while (e != NULL)
- {
- a = e->v; //запись значения из поля v в переменную a
- cout << a << " ";
- e = e->next;
- stack*e = MyStk->head; //е - временная переменная для хранения адреса элемента
- MyStk->head = MyStk->head->next; //перенос вершины
- delete e;
- if (a > 50)
- {
- stack1* h = new stack1;
- h->u = a; //запись элемента x в поле v
- h->next = MyStk1->head; //перенос вершины на следующий элемент
- MyStk1->head = h; //сдвиг вершины на позицию вперед
- }
- else
- {
- stack2* t = new stack2;
- t->p = a; //запись элемента x в поле v
- t->next = MyStk2->head; //перенос вершины на следующий элемент
- MyStk2->head = t; //сдвиг вершины на позицию вперед
- }
- }
- h = MyStk1->head;
- cout << endl << " >50 : ";
- while (h != NULL)
- {
- a = h->u; //запись значения из поля v в переменную a
- cout << a << " ";
- h = h->next;
- }
- cout << endl;
- t = MyStk2->head;
- cout << endl << " <50 : ";
- while (t != NULL)
- {
- a = t->p; //запись значения из поля v в переменную a
- cout << a << " ";
- t = t->next;
- }
- cout << endl;
- }
- void show(stack *MyStk) //Вывод стека
- {
- stack* e = MyStk->head; //объявляется указатель на вершину стека
- int a;
- cout << "Весь стек: " << endl;
- while (e != NULL)
- {
- a = e->v; //запись значения из поля v в переменную a
- cout << a << " ";
- e = e->next;
- }
- cout << endl;
- }
- void main()
- {
- setlocale(LC_ALL, "Rus");
- int k;
- stack *MyStk = new stack;
- stack1 *MyStk1 = new stack1;
- stack2 *MyStk2 = new stack2;//выделение памяти для стека
- MyStk->head = NULL; //инициализация первого элемента
- MyStk1->head = NULL;
- MyStk2->head = NULL;
- for (;;)
- {
- cout << "Работа со стеком. Выберите команду:" << endl;
- cout << "1 - Ввод стека" << endl;
- cout << "2 - Разбиение стека на два стека" << endl;
- cout << "3 - Вывод стеков" << endl;
- cout << "4 - Выход" << endl;
- cin >> k;
- switch (k)
- {
- case 1: cout << "Введите элемент для вставки: " << endl;
- cin >> k;
- push(k, MyStk); break;
- case 2: div(MyStk, MyStk1, MyStk2); break;
- case 3: show(MyStk); break;
- case 4: return; break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement