Xreferat.com » Рефераты по информатике и программированию » Структури даних для обробки інформації

Структури даних для обробки інформації

Зміст

Вступ

РОЗДІЛ І. ДИНАМІЧНІ СТРУКТУРИ ДАНИХ

1.1 ЗМІННІ-ВКАЗІВНИКИ

1.2. ЗВ’ЯЗАНИЙ СПИСОК. СТЕК

1.3. ЗВ’ЯЗАНИЙ СПИСОК. ЧЕРГА

РОЗДІЛ ІІ. ДЕРЕВА. БІНАРНЕ ДЕРЕВО

2.1. РЕАЛІЗАЦІЯ БІНАРНОГО ДЕРЕВА ЗА ДОПОМОГОЮ ДИНАМІЧНИХ ЗМІННИХ

ВИСНОВКИ

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

Вступ


Сучасні алгоритми працюють з великим обсягом інформації, і тому час пошуку у таких алгоритмах є критичним. Таким чином, актуальним є розроблення структур даних для ефективного зберігання та обробки інформації.

Однією з таких структур є бінарне дерево. Це динамічна структура даних, розмір якої обмежується тільки розміром віртуальної пам’яті комп’ютера. Бінарні дерева забезпечують пошук конкретного значення, максимуму, мінімуму, попереднього, наступного, операції вставки та видалення елемента.

Пошук у збалансованому дереві виконується за час O(log2n), але звичайні бінарні дерева можуть вироджуватись у список, при цьому пошук вже триватиме O(n) часу.

У повсякденному житті ми дуже часто зустрічаємо приклади дерев. Наприклад, люди часто використовують генеалогічне дерево для зображення структури свого роду; як ми побачимо, багато термінів, пов'язаних з деревами, узято саме звідси.

Другий приклад - це структура великої організації; використання деревоподібної структури для представлення її "ієрархічної структури" нині широко використовується в багатьох комп'ютерних завданнях.

Третій приклад - це граматичне дерево; спочатку воно служило для граматичного аналізу комп'ютерних програм, а нині широко використовується і для граматичного аналізу літературної мови.

РОЗДІЛ І. ДИНАМІЧНІ СТРУКТУРИ ДАНИХ


Під час роботи довільної програми значення деякої статичної змінної може змінюватися, але власне кількість оголошених статичних змінних не змінюється. Це не завжди зручно. Наприклад, якщо програма призначена для введення та обробки даних про учнів класу, а для збереження цих даних використовується звичайний масив, то визначаючи розмір масиву, приходиться орієнтуватися на деяке, як здається програмісту, граничне значення учнів в класі. При цьому якщо реально учнів в класі менше цього граничного значення, то пам’ять ПК використовується неефективно. Якщо ж учнів більше – то таку програму використовувати взагалі неможна.

В таких задачах зручно використовувати структури (подібні до масивів) в яких кількість елементів може змінюватися. Такими структурами є зв’язані список. Зв’язаний список нагадує масив, в якому кількість елементів змінюється під час роботи програми.

Зв’язаний список можна побудувати використовуючи динамічні змінні. Динамічні змінні можна створювати під час роботи програми («на ходу») за допомогою так званих змінних-вказівників.


ЗМІННІ-ВКАЗІВНИКИ


Структури даних для обробки інформації

Змінну-вказівник можна уявити як звичайну статичну змінну, але таку, в якій зберігається не деяке конкретне значення (наприклад типу integer, real, …), а адрес іншої змінної.

Змінна-вказівник (р) нагадує конверт, який містить лише адресу квартири Петрова, а не її вміст. Можна сказати, що змінна-вказівник р вказує на іншу змінну, яка знаходиться за адресою вул.. 1-го Травня, 58.

Вміст змінної-вказівника р:

Вул. 1 Травня, 58

Вміст змінної за адресою «Вул. 1 Травня, 58» (ця змінна не має імені):

Квартира Петрова

Змінна, що містить значення Квартира Петрова не є звичайною статичною змінною – вона динамічна.

<Ім’я змінної-вказівника>:^тип динамічної змінної

Наприклад, a:^integer; b:^real;

Щоб змінити значення динамічній змінній, на яку вказує деяка змінна-вказівник z, необхідно виконати команду:

z^:=<значення> (z – це змінна вказівник, а z^ - динамічна змінна, на яку вказує вказівник z).

Щоб змінити значення змінної-вказівника z (направити її на іншу динамічну змінну) необхідно:

z:=<деякий вказівник нв іншу динамічну змінну>

Оскільки динамічна змінна не має імені (а отже не описується в блоці var), то на початку роботи програми пам’ять під дану змінну не виділяється. А відповідна змінна-вказівник ні нащо не вказує. Коли змінна-вказівник ні нащо не вказує, то говорять, що вона вказує на nil.

Щоб виділити пам’ять, необхідно виконати процедуру new(x), де х – змінна-вказівник.

Після виконання даної процедури (new(x)) вказівник x буде вказувати на комірку пам’яті відповідного типу.

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїНехай на якомусь етапі роботи програми вказівник a вказує на деяку динамічну змінну, що містить число 5, а b на іншу змінну, що містить число 10 (мал.1)

Структури даних для обробки інформаціїПісля виконання вказівки a^:=10 (або a^:=b^) напрям вказівника a не змінюється, змінюється значення динамічної змінної (в нашому випадку зміниться значення змінної за адресою 1: замість 5 там буде міститися 10)


Якщо ж замість a^:=b^ записати a:=b, то напрям вказівника a змінюється. Змінна-вказівник a буде вказувати на ту ж змінну, що і вказівник b.(мал 3). Тепер значення динамічної змінної, що знаходиться за адресою 2 можна змінити двома способами: використовуючи вказівник a та вказівник b.

Після виконання вказівок:
a:=b;
a^:=100;
b^:=15;
writeln(a^);
на екрані буде число 15 (а не 100)

Приклад.1 Демонструє зміну напрямків вказівників на дві незалежні динамічні змінні.

var a,b,c:^byte;

begin

Структури даних для обробки інформаціїСтруктури даних для обробки інформації new(a);

new(b);

read(a^,b^);

c:=a;

Структури даних для обробки інформації

Структури даних для обробки інформації a:=b;

b:=c;

writeln(a^,' ',b^);

end.

Результат роботи програми:

1 2

2 1

В даній програмі використовується лише дві динамічні змінні (дві комірки пам’яті)

Приклад 2 Демонструє перестановку двох динамічних змінних з використанням третьої.

var

Структури даних для обробки інформації a,b,c:^byte;

begin

Структури даних для обробки інформації new(a);

new(b);

new(с);

read(a^,b^);

Структури даних для обробки інформації

Структури даних для обробки інформації c^:=a^;

a^:=b^;

b^:=c^;

writeln(a^,' ',b^);

end.

Результат роботи програми:

1 2

2 1

В даній програмі використовується три динамічні змінні (три комірки пам’яті). Вона працює повністю аналогічно як у випадку із звичайними статичними змінними.

Приклад 1 ефективніший за приклад 2, бо:

По-перше, використовується дві комірки пам’яті;

По-друге, вміст комірок пам’яті не змінюється.


1.2. ЗВ’ЯЗАНИЙ СПИСОК. СТЕК


Вказівники та динамічні змінні дозволяють створювати складні динамічні структури.

Найпростішою з них є зв’язаний список.

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


Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформації

Структури даних для обробки інформації

Структури даних для обробки інформації

a1 – змінна-вказівник

Елемент списку a1^– це динамічна змінна (наприклад типу zapis=record), яка в найпростішому випадку складається з двох полів: інформаційного (наприклад, name:string) та змінної-вказівника на наступний елемент списку (next:^zapis). Тобто, динамічна змінна – елемент списку – крім деякого значення містить адресу (змінну-вказівник) наступного елемента списку.

Спробуємо описати тип динамічної змінної.

Якщо ми назвали тип динамічної змінної zapis, то, здавалося б, цей тип має виглядати так:

type

Структури даних для обробки інформаціїzapis=record

Структури даних для обробки інформації name:string;

Структури даних для обробки інформації next:^zapis;

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїend;

Щоб вийти з цієї ситуації оголосимо спочатку «тип-вказівник» elem на тип zapis:

type

elem=^zapis;

zapis=record

name:string;

next:elem;

end;

Список, кожен елемент якого містять вказівник лише на наступний елемент називається однозв’язним.

Список, що містить два вказівники (на попередній та на наступний елементи) – двозвязний.

Формування стеку.

Формувати список можна добавляючи елементи як на початок списку (стек), як в кінець (черга), так і в довільне місце списку.

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації


Приклад 1. Наступна програма демонструє добавляння елемента на початок списку.

type

Структури даних для обробки інформації elem=^zapis;

zapis=record

name:string;

next:elem;

end;

var

a1,a:elem;

begin

new(a1);

a1^.name:='Иванов';

a1^.next:=nil;

writeln(a1^.name);

{Добавимо елемент 'Петров' на початок}

Структури даних для обробки інформації writeln('Формування стеку:');

new(a);

a^.name:='Петров';

a^.next:=a1;

write(a^.name,' ');

a:=a^.next;

writeln(a^.name);

end.


Результат роботи програми:

Иванов

Формування стеку:

Петров Иванов


Приклад 2. Наступна програма демонструє формування безкінечного стеку.

type

elem=^zapis;

zapis=record

name:string;

next:elem;

end;

var a1,a:elem;

name:string;

begin

repeat

readln(name);

if name<>'' then

begin

new(a);

a^.name:=name;

a^.next:=a1;

a1:=a;

end;

until name='';

while a<>nil do

begin

writeln(a^.name);

a:=a^.next;

end;

end.

Результат роботи програми:

елемент1

елемент2

елемент3

елемент4

елемент5

елемент6


елемент6

елемент5

елемент4

елемент3

елемент2

елемент1

Розглянемо докладніше як працює з попереднього прикладу структура:

new(a);

a^.name:=name;

a^.next:=a1;

a1:=a;

Структури даних для обробки інформаціїСтруктури даних для обробки інформації


Структури даних для обробки інформації


Структури даних для обробки інформації


Структури даних для обробки інформації

Структури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформації


Структури даних для обробки інформації


Структури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформації


Структури даних для обробки інформації


При повторному виконанні вказівок:

new(a);

a^.name:=name;

a^.next:=a1;

a1:=a;

в пам’яті ПК відбудуться наступні перетворення:


Структури даних для обробки інформації


Бачимо, що кожен наступний елемент (Name2) встановлюється на початок списку. Останній елемент, який увійде у стек – перший з нього виходить (він буде на першому місці, тобто при читанні стеку, буде першим).


1.3. ЗВ’ЯЗАНИЙ СПИСОК. ЧЕРГА.

Формування черги (вставка елементів в кінець списку).

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації


Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформаціїСтруктури даних для обробки інформаціїСтруктури даних для обробки інформації

Структури даних для обробки інформації


Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.
Подробнее

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: