Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція-3 - Списки.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
101.38 Кб
Скачать

Абстрактна структура даних список

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

Існує послідовний розподіл елементів у списку, при якому елементи зберігаються в послідовних комірках пам’яті. Такий спосіб – це масив.

Зв’язане представлення:

Схематично лінійний зв’язаний однонаправлений список можна зобразити наступним чином:

А1

А2

А3

NULL

Математична послідовність зображена таким чином: <А1, А2, А3>

Кожен елемент списку містить стрілочку, вказівник на наступний елемент. Останній елемент списку містить ознаку кінця списку.

Розглянемо порівняння послідовного та зв’язного розподілів на базі масиву розмірністю 6.

Послідовний

Зв’язний

[5]

[4]

[3]

А3

[2]

А2

[1]

А1

[0]

List

0

А3

0

Space[5]

А1

2

Space[4]

A

1

Space[3]

А2

5

Space[2]

A

0

Space[1]

A

0

Space[0]

List Free

4

3

Побудуєм список з 3-х елементів: <1,2,3>

1

2

3

NULL

Програмна реалізація роботи зі списками, представленим за допомогою вказівників:

1) опишемо типи і оголосимо змінну списку.

Struct node {

int data;

struct node * next;

}

typedef struct node * list

list head;

list * head_ptr;

2) в змінні x1 покладено адресу першого елемента:

list x1;

x1 = head;

3)в змінні x2 покладено адресу другого елемента:

list x2;

x2 = head -> next;

4) в x3 – адреса 3тього елемента:

x3 = head -> next -> next;

Або

x3 = head;

x3 = x3 -> next;

x3 = x3 -> next;

5) визначаєм адресу 30-того елемента:

for (i = 0; i < 29; ++i)

x30 = x30 -> next;

6) в змінну xk запишем адресу останнього елементу списку:

xk = head;

while (xk -> next )

xk = xk ->next;

7) в змінну y1 запишемо значення першого елемента списку:

int y1;

y1 = head -> data;

y1 = head -> next -> data;

8) 30-тий елемент

Введемо list tmp;

list tmp = head;

for ( i=0; i < 29; ++i)

tmp = tmp -> next;

y30 = tmp -> data;

9) інформація, що знаходиться в останньому елементі:

list tmp = head;

while (tmp -> next )

tmp = tmp -> next;

yk = tmp -> data;

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