Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦІї.docx
Скачиваний:
37
Добавлен:
10.11.2018
Размер:
280.19 Кб
Скачать

1.3. Деки

Деки - це впорядкована лінійна динамічно змінювана послідовність елементів, в якій виконуються такі умови:

1) новий елемент може приєднуватися з обох боків послідовності;

2) вибірка елементів можлива також з обох боків послідовності.

Наприклад, якщо послідовність D = D1,...,Dn зображує дек, то її елементи D1 і Dn вказують одночасно на місце включення і виключення елементів.

Деки бувають з обмеженнями з одного боку на виконання однієї з операцій (наприклад, один бік послідовності може бути закритий для вибірки елементів і відкритий тільки для приєднування, і навпаки).

Деки називають також реверсивними чергами або чергами з двома кінцями, в яких включення і виключення здійснюються з двох країв послідовності. Як і у випадку звичайних черг, для обслуговування деків також потрібно два вказівники, по одному на кожний кінець послідовності. Деки є найбільш загальною лінійною динамічною структурою даних.

1.4. Організація стеків, черг і деків

Послідовне зображення в пам‘яті ЕОМ стеків, черг і деків дещо відрізняються. Різниця полягав у тому, що адресація елементів стека у векторному зображенні здійснюється за допомогою одного вказівника, який вказує на початок стека, а адресація елементів черги і деку - за допомогою двох вказівників, що вказують на початок і кінець структури. В ролі вказівника у векторному зображенні цих структур може бути звичайний індекс, що вказує на позицію у векторі для включення і виключення елемента.

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

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

Контрольні запитання та вправи

1. Які є основні операції над лінійними структурами даних?

2. Що називається стеком?

3. Що таке верх і низ стеку?

4. Що називають дисципліною LIFO?

5. Що є перевагою стека перед іншими організаціями даних?

6. Що називається чергою?

7. Що називають дисципліною FIFO?

8. Дайте означення лінійної черги.

9. Дайте означення пріоритетної чер­ги.

10. Дайте означення циклічної черги.

11. Що називається деком?

ЛЕКЦІЯ 8

ЛІНІЙНІ СТРУКТУРИ ДАНИХ

(продовження)

2. Масиви

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

Розмір і розмірність масиву фіксовані. Найпростіший масив одномірний, його називають також вектором. Двомірний масив - матриця, де кожний елемент b[i,j] належить одночасно двом лінійним ортогональним послідовностям: j-му стовпцю та і-му рядку. Подібну структуру мають також масиви більшої розмірності, тобто кожний індекс масиву визначає одну ортогональну лінійну послідовність так само, як координати точки в багатомірній системі координат.

Універсальні мови програмування (такі як Фортран, Паскаль, С, С++) дають можливість працювати тільки з масивами ортогональної структури. Але ці самі двомірні масиви можуть бути симетричними, діагональними, квазідіагональними, де відмінні від нуля тільки ті елементи bij, для яких j=і або j = i+1 . Трикутні матриці називають тетраедральними. Крім того, існують ще так звані розріджені матриці, в яких багато елементів є нульовими. Такі структури можуть мати масиви різних розмірностей. Кожна з цих структур має свою структуру зберігання в пам'яті комп‘ютера. Як правило, ортогональні багатомірні масиви відображуються у одномірні.

Найбільш поширеними операціями над структурами масивів є:

1) пошук елемента за заданим індексом;

2) локалізація елемента в масиві;

3) запис елемента в масив;

4) злиття масивів і розбиття масиву на частини;

5) сортування елементів масиву за деякими правилами;

6) копіювання масивів.

Найскладнішою є операція локалізації або обчислення індексу елемента по відношенню до першого елемента. Розглянемо модифікації цієї операції для різних типів масивів і способів відображення їх у одномірний масив.

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

Індекс елемента bij двомірного масиву, що складається із n рядків та т стовпців, при зберіганні в пам'яті комп‘ютера "по стовпцях", обчислюється за формулою

(j-1)*n + (i-1) ,

а при зберіганні його "по рядках" - за формулою

(i-1)*m+(j-1).

У загальному випадку для n -мірного масиву, елемент якого позначається В [S1 , ... , Sn ] , а діапазон зміни iндексів визначається нерівностями 1 <= Si <= ui , i = 1,n , функція адресації цього масиву при запам'ятовуванні його "по рядках" має вигляд

f (S1 , ... , Sn )= u2 u3… un (S1-1)+ u3 u4 un (S2-1)+…+ un (Sn-1-1)+( Sn-1).

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