- •Списки магазинного типу
- •Загальна характеристика списків магазинного типу.
- •Void main ()
- •Void Spisok::postroenie ()
- •Формування стеку.
- •Int main ()
- •Void dobavlenie (node **stk, int el)
- •Void postroenie (node **stk)
- •Видалення ланки зі стеку.
- •Void udalenie(node **stk, int *klad)
- •Int main ()
- •Void postroenie(node **stk)
- •Void vyvod(node **stk)
- •Включення ланки в стек.
- •Void main ()
Void main ()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Spisok A;
int el;
A.POSTROENIE ();
A.VYVOD ();
cout<<"Введіть елемент, що додається: ";
cin>>el;
A.DOBAVLENIE (el);
A.VYVOD ();
cout<<"Видалимо елемент з черги:\n";
A.UDALENIE ();
A.VYVOD ();
el = A.Set_Udal();
cout<<"Інформаційне поле видаленої ланки: "<<el<<endl;
A.OCHISTKA();
}
--------------------------------------------------------------------------
Void Spisok::postroenie ()
{
node *r;
int el;
cout<<"Введіть елементи черги:\n";
cin>>el;
if (el!=0)
{
r = new (node);
r->value = el;
r->next = NULL;
no = r;
ko = r;
cin >> el;
while (el != 0)
{
r = new (node);
r->value = el;
r->next = NULL;
ko->next = r;
ko = r;
cin >> el;
}
}
else
{
r = NULL;
no = r;
ko = r;
}
}
--------------------------------------------------------------------------
void Spisok::VYVOD ()
{
node *r;
cout<<"Черга: ";
r = no;
while (r!=NULL)
{
cout << r->value << " ";
r = r->next;
}
cout << endl;
}
--------------------------------------------------------------------------
void Spisok::DOBAVLENIE (int el)
{
node *r;
r = new (node);
r->value = el;
r->next = NULL;
if (no!=NULL)
{
ko->next = r;
ko = r;
}
else
{
no = r;
ko = r;
}
}
--------------------------------------------------------------------------
void Spisok::UDALENIE ()
{
node *q;
if (no==NULL)
cout<<"Удалить нельзя, так как очередь пуста!\n";
else
{
klad = no->value;
q = no;
no = no->next;
delete q;
}
}
--------------------------------------------------------------------------
void Spisok::OCHISTKA()
{
node *q;
q = no;
if (no!=NULL)
{
while (no!=ko)
{
no=q->next;
delete q;
q=no;
}
delete no;
no=ko=NULL;
}
}
Формування стеку.
Стек на базі лінійного однонаправленого списку - лінійний однонаправлений список, в якому всі включення і виключення ланок робляться в одному (вибраному нами) кінці списку.
Опишем алгоритм помещения в стек информации.
Спочатку стек порожній:
stk = NULL;
Рис.1. Стек порожній
Вміст стека вводитимемо з клавіатури, введення закінчується нулем:
cin >> el;
t = new (node);
t->value = el;
t->next = stk;
Рис.2. Новий елемент
"Налаштовуємо" вказівник стеку на створений елемент:
stk = t;
Рис.3. "Налаштування" вказівника стеку
В результаті в стек буде поміщено першу ланку:
Рис.4. Перший елемент в стеку
Продовжимо заповнення стека:
cin >> el1;
t = new (node);
t->value = el1;
t->next = stk;
Рис.5. Розміщення в стеку другого елементу
"Налаштовуємо" вказівник стеку на створений елемент:
stk = t;
Рис.6. "Налаштування" вказівника стека
Тепер стек містить вже дві ланки:
Рис.7. У стеку два елементи
Приклад 16. Структурна программа. Формування стеку.
struct node
{
int value;
node *next;
};
void POSTROENIE (node** stk);
void VYVOD (node** stk);
--------------------------------------------------------------------------
