- 1
- 2
- 3
- 4
- 5
- . . .
- последняя »
зобразити так:
Петров
Сидорова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;nila^.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
а
Схема
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя »
Похожие работы
Тема: Access. Створення структури таблиці (бази даних) i введення даних у таблицю |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Методологія обробки статистичних даних |
Предмет/Тип: Менеджмент (Контрольная работа) |
Тема: Методологія обробки статистичних даних |
Предмет/Тип: Финансовый менеджмент, финансовая математика (Контрольная работа) |
Тема: Мікропроцесорна система обробки даних |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Курсовая работа (т)) |
Тема: Структури даних |
Предмет/Тип: Математика (Реферат) |
Интересная статья: Быстрое написание курсовой работы