
- •Списки магазинного типу
- •Загальна характеристика списків магазинного типу.
- •Void main ()
- •Void Spisok::postroenie ()
- •Формування стеку.
- •Int main ()
- •Void postroenie(node **stk)
- •Void vyvod(node **stk)
- •Включення ланки в стек.
- •Int main ()
- •Void dobavlenie (node **stk, int el)
- •Void postroenie (node **stk)
- •Видалення ланки зі стеку.
- •Void udalenie(node **stk, int *klad)
- •Void main ()
Int main ()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
node *stk;
POSTROENIE (&stk);
VYVOD (&stk);
return 0;
}
--------------------------------------------------------------------------
Void postroenie(node **stk)
{
node *t;
int el;
*stk = NULL;
cin >> el;
while (el!=0)
{
t = new (node);
t->value = el;
t->next = *stk;
*stk = t;
cin >> el;
}
}
--------------------------------------------------------------------------
Void vyvod(node **stk)
{
node *t;
cout << "Стек: ";
t = *stk;
while (t!=NULL)
{
cout << t->value<<" ";
t = t->next;
}
cout<<endl;
}
Включення ланки в стек.
Опишемо алгоритм включення ланки з інформаційним полем el в стек.
Початковий стан стека:
Рис.1. Початковий стан стеку
Створюємо новий елемент:
q = new (node);
q->value = el;
Рис.2. Новий елемент
Включаємо елемент в початок стеку:
q->next = stk;
Рис.3. Включення елементу в стек
"Налаштуємо" вказівник вершини стеку:
stk = q;
Рис.4. "Налаштування" вказівника вершини стеку
Приклад 17. Структурна программа. Включення ланки з інформаційним полем el в стек.
struct node
{
int value;
node *next;
};
void POSTROENIE (node** stk);
void VYVOD (node** stk);
void DOBAVLENIE (node** stk, int el);
--------------------------------------------------------------------------
Int main ()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
node *stk;
int el;
POSTROENIE (&stk);
VYVOD (&stk);
cout << "\nВедіть ланку, що додається" << endl ;
cin >> el;
DOBAVLENIE(&stk, el);
VYVOD (&stk);
return 0;
}
--------------------------------------------------------------------------
… … …
Void dobavlenie (node **stk, int el)
{
node *q;
q = new (node);
q->value = el;
q->next = *stk;
*stk = q;
}
Функцію POSTROENIE() можна переписати, якщо скористатися функцією DOBAVLENIE ():
Void postroenie (node **stk)
{
int el;
*stk = NULL;
cin>>el;
while (el!=0)
{
DOBAVLENIE(stk,el);
cin >> el;
}
}
Видалення ланки зі стеку.
Перед видаленням ланки із стека перевіряємо, чи порожній стек.
Нехай стек не порожній.
Ріс.1. Початковий стек.
Тогда приступаем к удалению.
Зберігаємо елемент, що видаляється:
klad = stk->value;
Рис.2. Сохранение удаляемого элемента.
"Переналаштовуємо" вказівник стеку і зберігаємо адресу елементу, що видаляється:
q = stk;
stk = stk->next;
Рис.3. "Перенастроювання" вказівника стеку.
Повертаємо пам'ять в купу:
delete q;
Рис.4. Повернення пам'яті в купу
Приклад 18. Структурна программа. Видалення ланки зі стеку.
--------------------------------------------------------------------------
… … …
Void udalenie(node **stk, int *klad)
{
node *q;
if (*stk==NULL)
cout<<"Стек пуст!\n";
else
{
*klad = (*stk)->value;
q = *stk;
*stk = (*stk)->next;
delete q;
}
}
Приклад 19. Об'єктно-орієнтована програма, що реалізовує дії зі стеком.
Формування і виведення вмісту стека на екран дисплея. Видалення і вставка ланки в стек.
#include <iostream.h>
#include <windows.h>
struct node
{
int value;
node *next;
};
class Spisok
{
private:
node *stk;
int klad;
public:
Spisok ()
{
stk=NULL;
}
int Set_Stack ()
{
return klad;
}
void POSTROENIE();
void VYVOD();
void DOBAVLENIE(int);
void YDALENIE ();
void OCHISTKA();
};
--------------------------------------------------------------------------