Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASD_Lecture03

.pdf
Скачиваний:
22
Добавлен:
12.02.2016
Размер:
2.47 Mб
Скачать

Послідовні структури даних

Масив: структура із фіксованим розміром даних

 

 

 

 

 

 

Приклад:

Ширина запису (w) = 3

 

 

 

 

 

 

Початкова

 

 

 

 

 

 

адреса (s):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Адреса

38

39

40

41

42

43

44

 

45

46

47

48

49

Вміст

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Масив індексів (i):

1

 

 

2

 

 

 

3

4

 

 

11

Лекція 3

Ширина запису (w) = 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

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