Читать курсовая по информатике, вычислительной технике, телекоммуникациям: "Структури даних для обробки інформації" Страница 3

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

зобразити так:

Петров

Сидорова1Іванов

Елемент списку a1^

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

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

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

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

type

zapis=record

Pascal цього не дозволить(тоді, як С++ дозволяє)

name:string;

next:^zapis;

end;

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

type

elem=^zapis;

zapis=record

name:string;

next:elem;

end;

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

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

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

Список до внесення елемента «Ільчук» в стека1

СидоровПетровІванов

Ільчук

Список після внесення елемента «Ільчук» в стекСидоровПетровІванов

а1

Ільчук

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

type

Иванов

Петров

а1

а

nil

nil

Схема пам'яті ПК до виконання вказівки a^.next:=a1;

elem=^zapis;

zapis=record

name:string;

next:elem;

end;

var

a1,a:elem;

begin

new(a1);

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

a1^.next:=nil;

writeln(a1^.name);

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

Иванов

Петров

а1

а

nil

Схема пам'яті ПК після виконання вказівки a^.next:=a1;

writeln('Формування стеку:');

new(a);

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

a^.next:=a1;

write(a^.name,' ');

a:=a^.next;

writeln(a^.name);

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

Иванов

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

Петров Иванов Приклад 2. Наступна програма демонструє формування безкінечного стеку. type elem=^zapis; zapis=recordname:string;next:elem; end; var a1,a:elem;name:string; begin repeat readln(name); if name'' then beginnew(a);a^.name:=name;a^.next:=a1;a1:=a; end; until name=''; while anil do beginwriteln(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;а1аnilСхема пам’яті ПК після виконання вказівки new(a);а1аnilnilСхема пам’яті ПК на початку роботи програми

new(a);

a^.name:=name;

nameа1аСхема пам’яті ПК після виконання вказівки a^.next:=a1nilnameа1аnilСхема пам’яті ПК після виконання вказівки a^.name:=name;nil

a^.next:=a1;

a1:=a;

nameа1аСхема пам’яті ПК після виконання вказівки a1:=anil При повторному виконанні вказівок:new(a);a^.name:=name;a^.next:=a1;a1:=a; в пам’яті ПК відбудуться наступні перетворення:

а1

а

nil

Схема пам’яті ПК після виконання вказівки new(a);

Name1

nil

new(a);

Name2

а1

а

nil

Схема пам’яті ПК після виконання вказівки a^.name:=name;

nil

Name1

a^.name:=name;

a^.next:=a1;

Name2

а1

а

Схема пам’яті ПК після виконання вказівки a^.next:=a1

nil

nil

Name1

Name2

а1

а

Схема


Интересная статья: Быстрое написание курсовой работы