Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонспектЛекций Т Алгоритмов.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
480.26 Кб
Скачать

3. Структури даних.

3.1 Статичні та динамічні структури даних.

Вибір структури даних може суттєво вплинути на ефективність алгоритма.

Оперативна пам’ять організована сегментами: сегмент даних, стек, тіло програми (код) та інші. Розмір сегментів визначається архітектурою мікропроцесору.

Змінні, що об’явлені в програмі, розміщуються в сегменті даних (статична пам’ять). Але цього сегменту даних при обробці великих масивів даних може не вистачити. Тому при роботі з великими масивами даних користуються динамічною пам’ятью.

Динамічна пам’ять - це найбільший сегмент оперативної пам’яті, що надається програмі при її роботі.

Статичне розміщення даних здійснюється при компиляції програми, динамічне - безпосередньо при роботі програми.

До статичних структур даних належать масиви, записи (структури, класи), множини.

До динамічних структур даних належать лінійні зв'язані структури: списки, черги, стеки; нелінійні структури: дерева (графи, мережі).

Ці структури є фундаментальними в програмуванні.

У лінійно зв'язаних структурах:

  1. всі елементи зв'язані між собою в ланцюг за допомогою покажчиків;

  2. пам'ять для елементів виділяється і звільняється динамічно;

  3. послідовність елементів має початок ланцюга і кінець (вершину), що адресує покажчик стека, черги або списку.

Елементами лінійно зв'язаних структур є записи (структури struct), що містять інформаційне поле та одне чи кілька полів з адресами наступного (попереднього) елементів. Таким чином, елемент містить покажчик на інший елемент.

Несхожість лінійних зв'язаних структур полягає в тому, що включення і виключення елементів з цих структур відбувається по-різному.

Схема взаємодії елементів у ланцюзі зв'язаних структур

К інець ланцюга (null - 0) (вершина) Початок

ланцюга

Стек: включення і виключення

елементів тільки на вершині стеку.

Черга: включення - тут; виключення – тут.

Список: включення і виключення елементів у

будь-якому місці ланцюга.

3.2. Стеки

Стек - це лінійна зв'язана структура даних, в якій додавати (включати), видаляти (виключати) і читати дані можна тільки з одного кінця (вершина - top): доступний при цьому тільки елемент, доданий у стек останнім. Інші назви цього способу організації даних:

- LIFO-Last In- First Out (останнім увійшов - першим вийшов);

  • магазинна пам'ять.

Елемент стека має вид:

struct node

{ float num //ключове поле

//інформаційні поля

node *next; // покажчик на попередній елемент

};

Приклад.

Ввести з клавіатури n цілих чисел і розмістити їх в стек. Підрахувати кількість позитивних елементів стеку та витягти зі стека всі елементи.

Блок-схема програми

Блок-схема функції push додавання до стеку нового елемента

Блок-схема функції pop видалення останнього елемента стека

Блок-схема функції printstack виведення на екран елементів стека

ЦИКЛ

top<>0

ЦИКЛ

Текст програми

#include <iostream.h>

struct node

{

float num;

node* next;

} ;

// прототипи функцій

node* push(node* , float); // додавання елементу в стек

void printstack(node* ); // виведення на екран (читання) елементів стеку

node* pop(node*); // видалення елементу зі стеку

void main()

{

float what;

int n,i;

node* top=0;

cout<<"input n\n";

cin>>n;

cout<<endl;

// формування стеку з n елементів

cout<<"input what"<< n<<"value\n";

for (i=1;i<=n;i++)

{

cin>>what;

top= push(top, what);

}

// виведення на екран елементів стека

printstack(top);

int k=0;

// підрахунок кількості позитивних елементів та звільнення пам’яті

while(top)

{

if (top->num >0)

k++;

top= pop(top);

}

cout<<"k="<< k<<"\n";

}

node* push(node* top, float what)

{

node* pv=new node;

pv->num=what;

pv->next=top;

return pv;

}

void printstack(node* top)

{

float what;

cout<<"stek:\n";

while (top)

{

cout<<top->num<<" ";

top=top->next;

}

cout<<endl;

}

node* pop(node* top)

{

node* pv=top->next;

delete top;

return pv;

}