
ASD_Lecture03
.pdf
Послідовні структури даних
Масив: структура із фіксованим розміром даних |
|
|
|
|
|
|
|||||||||
Приклад: |
Ширина запису (w) = 3 |
|
|
|
|
|
|
||||||||
Початкова |
|
|
|
|
|
|
|||||||||
адреса (s): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Адреса … |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
|
45 |
46 |
47 |
48 |
49 |
… |
|
Вміст |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Масив індексів (i): |
1 |
|
|
2 |
|
|
|
3 |
4 |
|
|
11
Лекція 3

Послідовні структури даних
Масив: структура із фіксованим розміром даних
Приклад:
Початкова адреса (s):
Адреса … |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
… |
Вміст |
|
|
|
|
|
|
|
|
|
|
|
|
|
Масив індексів (i): |
1 |
|
|
2 |
|
|
3 |
4 |
|
|
Розташування елементів масиву можна визначити безпосередньо:
Адреса A[i]=s+iw (для поч. індексу= 0, пр. Перший елемент є A[0])
Адреса A[i]=s+w(i-1) (для поч. індексу= 1, пр. Перший елемент є A[1])
12
Лекція 3

Переваги послідовних структур даних
•Ми можемо отримати елемент масиву за індексом за постійний час, O (1), це означає , що асимптотично це нічого нам не коштує при пошуку елемента.
•Складаються виключно з даних, простір не витрачається на вказівники.
•Фізичне розташування безперервності/пам'яті: якщо ми шукаємо елемент i, тоді існує висока ймовірність, що ми будемо шукати наступний елемент i+1 - це використовується кеш-пам'яттю усучасних комп'ютерних архітектурах.
13
Лекція 3

Недоліки послідовних структур даних
•Негнучкість: Ми повинні заздалегідь вирішити, скільки місця ми хочемо при створенні масиву.
•Як тільки блок пам'яті для масиву був виділений – він залишається постійним.
•Якщо спробувати записати щось поза кінцем масиву
(переповнення), ми будемо втручатися на виділену для чогось іншого пам'ять.
•У нас завжди є можливість компенсувати попередні недоліки шляхом виділення більших масивів, ніж нам потрібно, але для цього витрачається багато місця.
•Негнучкість : думати про видалення або вставляння послідовності записів у середині масиву.
14
Лекція 3

Вказівники
•Вказівник є типом даних.
•Можна створювати змінні даного типу шляхом, аналогічним і для інших структур даних.
•Містить адресу пам’яті.
•Вказує на особливий тип даних.
int *pointer1 = &x;
int x;
addr of x
0x2000
1
15
Лекція 3 |
0x9060 |

Операції з вказівниками
Type object;
Type* aPtr;
•aPtr = &object присвоює адресу оbject
змінній aPtr.
•*aPtr дозволяє доступ до object через
вказівник.
•якщо aPtr вказує на структуру тоді
(*aPtr).member
є еквівалентним
aPtr-> member
16
Лекція 3

Вказівники і аргументи функції
x: |
1 |
Заміна |
x: |
2 |
y: |
2 |
(swap) |
y: |
1 |
|
|
|
|
|
17
Лекція 3

Рішення 1
#include <stdio.h>
void fakeSwap(int a, int b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int main()
{
int x = 1, y = 2;
fakeSwap(x, y);
printf(“%d %d\n”, x, y);
18
}
Лекція 3

Рішення 1
#include <stdio.h>
void fakeSwap(int a, int b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int main()
{
int x = 1, y = 2;
fakeSwap(x, y); printf(“%d %d\n”, x, y);
x:
1 0x2000
y:
2 0x2010
19
}
Лекція 3

Рішення 1
#include <stdio.h>
void fakeSwap(int a, int b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int main()
{
int x = 1, y = 2;
fakeSwap(x, y); printf(“%d %d\n”, x, y);
tmp:
0x2060
a:
1 0x2038
b:
2 0x2040
x:
1 0x2000
y:
2 0x2010
20
}
Лекція 3