
labs&konspeckts / SP_ukr / asm_9
.docМетоди сортування, додавання і видалення елементів таблиць
Мета: вивчення основних методів сортування, додавання і видалення елементів таблиць.
Теоретичні відомості
Таблиці та їх призначення в системних програмах
У системних програмах використовуються таблиці імен та констант в
транслюючих програмах, які призначені для синтаксичного аналізу та семантичної обробки. Структурно таблиці зазвичай організовуються як масиви і структури для посилання. Структури даних табличного типу широко використовуються в системних програмах, так як забезпечують просте і швидке звернення до даних. Таблиці складаються з елементів, кожен з яких представляється декількома полями.
Визначення таблиці
Директива STRUC призначена для визначення структурованих блоків даних.
Поле структури - послідовність байтів, слів, подвійних слів, які несуть інформацію про один з елементів структури.
Визначення структури задає шаблон структури і виглядає таким чином:
Ім'я структури STRUC
Послідовність директив DB, DW, DD
Ім'я структури ENDS
У спрощеному вигляді таблиця складається з двох полів - ключа і характеристики.
Ключ є унікальним ідентифікатором запису, основним критерієм для сортування, пошуку та інших основних операцій. Характеристика несе в собі інформаційну частину запису.
Наприклад: sELEMENT STRUC
key DW 0
field DB 0
sELEMENT ENDS
Для резервування пам'яті та ініціалізації значень використовується оператор виклику структури:
Змінна Ім’я структури <Специфікації ініціалізації>
Змінна асоціюється з початком структури і використовується з
іменами полів для звернення до різних полів в структурі:
змінна.поле
Наприклад,
sTB01 sELEMENT <100,25>
MOV AX,sTB01.key
при цьому в регістрі AX виявиться число 100.
Сортування елементів таблиці
Однією з найбільш часто розв'язуваних задач обработки таблиць є сортування елементів.
Сортування - процес перегрупування заданої множини об'єктів в певному порядку. Мета сортування - полегшити подальший пошук в такій відсортованій множині.
Вибір алгоритму сортування залежить від структури оброблюваних даних.
Короткий опис алгоритмів сортування
Сортування бульбашкою
Алгоритм полягає в повторюваних проходах по сортованому масиву. За кожен прохід елементи послідовно порівнюються попарно і, якщо порядок у парі невірний, виконується обмін елементів. Проходи по масиву повторюються до тих пір, поки на черговому проході не виявиться, що обміни більше не потрібні, що означає - масив відсортований. При проході алгоритму, елемент, що стоїть не на своєму місці, «спливає» до потрібної позиції як бульбашка у воді, звідси і назва алгоритму. Іноді на кожному кроці масив проглядається то з початку, то з кінця. Це називається шейкерне сортування.
Сортування вибором
Вибирається елемент з найменшим ключем і змінює своє місце з першим
елементом. Потім цей процес повторюється з рештою n-1 елементами, n-2 елементами і т.д. до тих пір, поки не залишиться один, найбільший елемент.
Кроки алгоритму:
- Знаходимо мінімальне значення в поточному списку
- Виробляємо обмін цього значення зі значенням на першій позиції
- Тепер сортуємо хвіст списку, виключивши з розгляду вже відсортований перший елемент
Додавання елементів у таблицю
Алгоритм полягає в повторюваних діях з елементами таблиці. Вибирається позиція в таблиці на яку потрібно додати елемент. Після чого відбувається переміщення всіх елементів на позицію нижче і в позицію, що звільнилася, відбувається додавання елемента.
Кроки алгоритму:
- Знаходимо позицію в таблиці, на яку потрібно додати елемент.
- Виконуємо копіювання кожного наступного елемента на позицію нижче.
- Виконуємо запис елемента, який потрібно додати в позицію, що звільнилась.
Видалення елементів з таблиці
Алгоритм полягає в повторюваних діях з елементами таблиці.
Вибирається позиція в таблиці з якою необхідно видалити елемент. Після чого відбувається запис наступного елемента на місце, що видаляється. Вибирається наступний елемент таблиці і записується на місце раніше переміщеного елементу. Ці дії повторюються до тих пір поки всі елементи після видалення не перемістяться на позицію вище.
Кроки алгоритму:
- Знаходимо позицію в таблиці з якою необхідно видалити елемент.
- Виконуємо копіювання наступного елемента на позицію елемента, що видаляється (на позицію вище).
- Виконуємо копіювання всіх наступних елементів на позицію вище.
Завдання на лабораторну роботу
1. Вивести на екран прізвище, групу и № варіанту.
2. Визначити таблицю з двома полями:
- ключ (тип визначається по варіанту)
- характеристика (тип довільний)
Кількість записів в таблиці визначається по варіанту.
3. Відсортувати таблицю заданим по варіанту методом сортування.
4. Провести додавання запису в таблицю по варіанту зі значеннями полів:
- ключ = № варіанту
- характеристика = № групи
5. Провести видалення запису з таблиці по порядковому номеру (індексу), що визначається за варіантом.
Примітка: Варіант визначається по номеру групи і номеру по списку.
Група № Х1
№ варіанту |
Метод сортування |
Додавання запису |
К-сть записів |
Тип ключа |
1 |
Бульбашкою |
Індекс2 |
4 |
байт |
2 |
Вибором |
В середину таблиці |
5 |
слово |
3 |
Шейкерне |
Індекс2 |
6 |
символ |
4 |
Бульбашкою |
Індекс2 |
7 |
2 символи |
5 |
Вибором |
В середину таблиці |
8 |
байт |
6 |
Шейкерне |
Індекс2 |
4 |
слово |
7 |
Бульбашкою |
Індекс2 |
5 |
символ |
8 |
Вибором |
В середину таблиці |
6 |
2 символи |
9 |
Шейкерне |
Індекс2 |
7 |
байт |
10 |
Бульбашкою |
Індекс2 |
8 |
слово |
11 |
Вибором |
В середину таблиці |
4 |
символ |
12 |
Шейкерне |
Індекс2 |
5 |
2 символи |
13 |
Бульбашкою |
Індекс2 |
6 |
байт |
14 |
Вибором |
В середину таблиці |
7 |
слово |
15 |
Шейкерне |
Індекс2 |
8 |
символ |
16 |
Бульбашкою |
Індекс2 |
4 |
2 символи |
17 |
Вибором |
В середину таблиці |
5 |
байт |
18 |
Шейкерне |
Індекс2 |
6 |
слово |
19 |
Бульбашкою |
Індекс2 |
7 |
символ |
20 |
Вибором |
В середину таблиці |
8 |
2 символи |
21 |
Шейкерне |
Індекс2 |
4 |
байт |
22 |
Бульбашкою |
Індекс2 |
5 |
слово |
23 |
Вибором |
В середину таблиці |
6 |
символ |
24 |
Шейкерне |
Індекс2 |
7 |
2 символи |
25 |
Бульбашкою |
Індекс2 |
8 |
байт |
26 |
Вибором |
В середину таблиці |
4 |
слово |
27 |
Шейкерне |
Індекс2 |
5 |
символ |
28 |
Бульбашкою |
Індекс2 |
6 |
2 символи |
29 |
Вибором |
В середину таблиці |
7 |
байт |
30 |
Шейкерне |
Індекс2 |
8 |
слово |
Видалення запису по Індексу Додавання запису по Індексу2 |
Індекс = (№варіанта) mod (К-сть записів) + 1 Індекс2 = ((№варіанту*Тип ключа) mod (К-сть записів-2))+2 |
№ варіанту |
Метод сортування |
Додавання запису |
К-сть записів |
Тип ключа |
1 |
Шейкерне |
Індекс2 |
4 |
слово |
2 |
Бульбашкою |
Індекс2 |
5 |
символ |
3 |
Вибором |
В середину таблиці |
6 |
2 символи |
4 |
Шейкерне |
Індекс2 |
7 |
байт |
5 |
Бульбашкою |
Індекс2 |
8 |
слово |
6 |
Вибором |
В середину таблиці |
4 |
символ |
7 |
Шейкерне |
Індекс2 |
5 |
2 символи |
8 |
Бульбашкою |
Індекс2 |
4 |
байт |
9 |
Вибором |
В середину таблиці |
5 |
слово |
10 |
Шейкерне |
Індекс2 |
6 |
символ |
11 |
Бульбашкою |
Індекс2 |
7 |
2 символи |
12 |
Вибором |
В середину таблиці |
8 |
байт |
13 |
Шейкерне |
Індекс2 |
4 |
слово |
14 |
Бульбашкою |
Індекс2 |
5 |
символ |
15 |
Вибором |
В середину таблиці |
6 |
2 символи |
16 |
Шейкерне |
Індекс2 |
7 |
байт |
17 |
Бульбашкою |
Індекс2 |
8 |
слово |
18 |
Вибором |
В середину таблиці |
4 |
символ |
19 |
Шейкерне |
Індекс2 |
5 |
слово |
20 |
Бульбашкою |
Індекс2 |
6 |
символ |
21 |
Вибором |
В середину таблиці |
7 |
2 символи |
22 |
Шейкерне |
Індекс2 |
8 |
байт |
23 |
Бульбашкою |
Індекс2 |
6 |
слово |
24 |
Вибором |
В середину таблиці |
7 |
2 символи |
25 |
Шейкерне |
Індекс2 |
8 |
байт |
26 |
Вибором |
В середину таблиці |
4 |
слово |
27 |
Шейкерне |
Індекс2 |
5 |
символ |
28 |
Бульбашкою |
Індекс2 |
6 |
2 символи |
29 |
Вибором |
В середину таблиці |
7 |
байт |
30 |
Шейкерне |
Індекс2 |
8 |
слово |
Видалення запису по Індексу Додавання запису по Індексу2 |
Індекс = (№варіанту) mod (К-сть записів) + 1 Індекс2 = ((№варіанту*Тип ключа) mod (К-сть записей-2))+2 |
Группа № Х3
№ варіанту |
Метод сортування |
Додавання запису |
К-сть записів |
Тип ключа |
1 |
Бульбашкою |
Індекс2 |
4 |
байт |
2 |
Вибором |
В середину таблиці |
5 |
слово |
3 |
Шейкерне |
Індекс2 |
6 |
символ |
4 |
Бульбашкою |
Індекс2 |
7 |
2 символи |
5 |
Вибором |
В середину таблиці |
8 |
байт |
6 |
Шейкерне |
Індекс2 |
4 |
слово |
7 |
Бульбашкою |
Індекс2 |
5 |
байт |
8 |
Вибором |
В середину таблиці |
6 |
слово |
9 |
Бульбашкою |
Індекс2 |
7 |
символ |
10 |
Вибором |
В середину таблиці |
8 |
2 символи |
11 |
Шейкерне |
Індекс2 |
4 |
байт |
12 |
Бульбашкою |
Індекс2 |
5 |
слово |
13 |
Вибором |
В середину таблиці |
6 |
символ |
14 |
Шейкерне |
Індекс2 |
4 |
2 символи |
15 |
Бульбашкою |
Індекс2 |
5 |
байт |
16 |
Вибором |
В середину таблиці |
6 |
2 символи |
17 |
Шейкерне |
Індекс2 |
7 |
байт |
18 |
Бульбашкою |
Індекс2 |
8 |
слово |
19 |
Вибором |
В середину таблиці |
4 |
символ |
20 |
Шейкерне |
Індекс2 |
5 |
2 символи |
21 |
Бульбашкою |
Індекс2 |
6 |
байт |
22 |
Вибором |
В середину таблиці |
7 |
слово |
23 |
Вибором |
Індекс2 |
6 |
символ |
24 |
Шейкерне |
Індекс2 |
7 |
2 символи |
25 |
Бульбашкою |
Індекс2 |
8 |
байт |
26 |
Бульбашкою |
В середину таблиці |
4 |
символ |
27 |
Вибором |
Індекс2 |
5 |
2 символи |
28 |
Шейкерне |
Індекс2 |
6 |
байт |
29 |
Бульбашкою |
В середину таблиці |
7 |
слово |
30 |
Шейкерне |
Індекс2 |
8 |
слово |
Видалення запису по Індексу Додавання запису по Індексу2 |
Індекс = (№варіанту) mod (К-сть записів) + 1 Індекс2 = ((№варианту*Тип ключа) mod (К-сть записів-2))+2 |
Группа № Х4
№ варіанту |
Метод сортування |
Додавання запису |
К-сть записів |
Тип ключа |
1 |
Шейкерне |
Індекс2 |
4 |
байт |
2 |
Бульбашкою |
В середину таблиці |
5 |
слово |
3 |
Вибором |
Індекс2 |
6 |
символ |
4 |
Шейкерне |
Індекс2 |
7 |
байт |
5 |
Бульбашкою |
В середину таблиці |
4 |
слово |
6 |
Вибором |
Індекс2 |
5 |
символ |
7 |
Шейкерне |
Індекс2 |
6 |
2 символи |
8 |
Бульбашкою |
В середину таблиці |
7 |
байт |
9 |
Вибором |
Індекс2 |
8 |
слово |
10 |
Шейкерне |
В середину таблиці |
4 |
символ |
11 |
Бульбашкою |
Індекс2 |
5 |
2 символи |
12 |
Вибором |
Індекс2 |
5 |
2 символи |
13 |
Шейкерне |
В середину таблиці |
6 |
байт |
14 |
Бульбашкою |
Індекс2 |
7 |
слово |
15 |
Шейкерне |
В середину таблиці |
8 |
символ |
16 |
Вибором |
Індекс2 |
7 |
2 символи |
17 |
Шейкерне |
Індекс2 |
8 |
байт |
18 |
Бульбашкою |
В середину таблиці |
4 |
слово |
19 |
Шейкерне |
Індекс2 |
5 |
символ |
20 |
Бульбашкою |
Індекс2 |
6 |
2 символи |
21 |
Вибором |
Індекс2 |
7 |
2 символи |
22 |
Шейкерне |
В середину таблиці |
8 |
байт |
23 |
Бульбашкою |
Індекс2 |
7 |
слово |
24 |
Вибором |
Індекс2 |
7 |
символ |
25 |
Шейкерне |
Індекс2 |
8 |
байт |
26 |
Бульбашкою |
В середину таблиці |
4 |
слово |
27 |
Шейкерне |
Індекс2 |
5 |
символ |
28 |
Бульбашкою |
Індекс2 |
6 |
2 символи |
29 |
Вибором |
В середину таблиці |
7 |
байт |
30 |
Шейкерне |
Індекс2 |
8 |
слово |
Видалення запису по Індексу Додавання запису по Індексу2 |
Індекс = (№варіанту) mod (К-сть записів) + 1 Індекс2 = ((№варіанту*Тип ключа) mod (К-сть записів-2))+2 |