Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Списки магазинного типу.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
245.25 Кб
Скачать

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. Початковий стан стека:

Рис.1. Початковий стан стеку

  1. Створюємо новий елемент:

q = new (node);

q->value = el;

Рис.2. Новий елемент

  1. Включаємо елемент в початок стеку:

q->next = stk;

Рис.3. Включення елементу в стек

  1. "Налаштуємо" вказівник вершини стеку:

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. Початковий стек.

Тогда приступаем к удалению.

  1. Зберігаємо елемент, що видаляється:

klad = stk->value;

Рис.2. Сохранение удаляемого элемента.

  1. "Переналаштовуємо" вказівник стеку і зберігаємо адресу елементу, що видаляється:

q = stk;

stk = stk->next;

Рис.3. "Перенастроювання" вказівника стеку.

  1. Повертаємо пам'ять в купу:

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();

};

--------------------------------------------------------------------------

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]