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 |
|||
