Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сборка мусора

Дек

Else

Begin

Begin

Then

Begin

Then

Begin

Очередь

В очереди существует указатель не только на «голову», но и на «хвост» очереди.

Очередь – структура данных, в которой добавление новых элементов производится с одного конца, а извлечение с другого.

Например, ввод данных с клавиатуры производится через буфер данных – это область оперативной памяти персонального компьютера, в которой хранятся по мере поступления/извлечения коды вводимых символов.

Если значения указателей начала и конца совпадают, то значит, что буфер пустой.

Пример программы создания и удаления очереди:

program oсhered;

uses Crt;

type Ptr=^Elem;

Elem= record

Inf: real;

Link: Ptr

end;

var BegQ,EndQ: Ptr;

Znach: real;

i: byte;

 

procedure AddEl(var Val:real);

var P: Ptr;

new (P);

P^.Inf:=Val;

P^.Link:= nil;

if EndQ= nil {если значение указателя на конец

очереди}

BegQ:=P {то создаем первый элемент очереди}

else

EndQ^.Link:=P; {иначе создаем очередной

элемент очереди}

EndQ:=P

end;

 

procedure DelEl(var Val: real);

var P: Ptr;

Val:= BegQ^.Inf;

P:= BegQ;

BegQ:=P^.Link;

if BegQ= nil {если значение указателя на начало

очереди}

EndQ:= nil; {то удаляем последний элемент очереди}

Dispose (P)

end;

 

begin {oсhered}

ClrScr;

{начальные установки указателей}

BegQ:= nil;

EndQ:= nil;

 

{создаем очередь из 10 элементов}

for i:=1 to 10 do

AddEl(i);

{удаляем очередь, распечатывая значения элементов}

while BegQ<> nil do

DelEl(Znach);

writeln (‘Znach= ’, Znach:5:2);

end;

end. {oсhered}

 

Пример программы, формирующей связанный список в процессе ввода данных:

program Spisok;

uses crt;

type Pe=^Typelem; {описание элемента списка}

Typelem= record

T:real

P: Pe;

end;

var Elem,first: Pe;

X: real;

Ch: char;

n: integer;

 

begin {Spisok}

ClrScr;

new (Elem); {выделение памяти}

first:=Elem;

Elem^.P:=Elem;

while Elem^.P<> nil do {пока не конец списка,

выполнять}

write (‘Ввелите число: ’);

readln (Elem^.T); {ввод значений элементов}

write (‘Повторить ввод? (Y/N)’);

readln (Ch);

if (Ch=’n’) or (Ch=’N’) {если введено ’n’ или

’N’ (т.е. нет)}

then Elem^.P:= nil {то ссылке последнего

элемента присваивается значение nil}

begin {иначе выделяем память под новый

элемент}

new (Elem^.P);

Elem:=Elem^.P;

end;

n:=n+1; {подсчитываем количество элементов

списка}

end;

writeln (‘Ввод данных закончен’);

writeln (‘Вывод элементов списка’);

Elem:=first;

repeat {выводим элементы, пока не конец списка}

writeln (‘ ’,Elem^.T:8:3);

Elem:=Elem^.P;

until Elem= nil;

writeln (‘Количество элементов=’,n);

writeln;

end. {Spisok}

 

Над очередью определены две операции:

1) занесение элемента в очередь,

2) выбор элемента из очереди.

 


Придумал Дональд Кнут (7 томов «Искусство программирования»). Deque – «кольцевая очередь» – Dek.

В каждый момент времени Dek-а возможно перемещение как вперед так и назад. Если указатели показывают в одно и то же место, то двунаправленная очередь пуста.

 

Как только список свободных областей становится пустым, производится проверка всех активных списков. Любой элемент, который не входит нив один из активных списков, считается не нужным, а область, в которой он находится, возвращается в список свободных областей. Эта операция называется сборкой мусора. (Какой бы не была по объему память компьютера, она все равно кончается – для этого и нужна сборка мусора.)

 


17 марта

 

СРС: 1. Какие из операторов неправильные? Ответ пояснить.

var p,q: ^integer;

r: char;

 

p:=q;

q:=r;

p:= nil;

r:= nil;

q:=p^;

r^:=p^;

q^:=ord(r^);

if r<>nil then r^:=nil^;

if q>nil then q^:=p^;

2.Что будет выведено на экран в результате выполнения программы?

program Ukazatel;

type ref=^integer;

var p,q: ref;

<== предыдущая лекция | следующая лекция ==>
Нелинейные списки (структуры) | XIII. Графы
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 387; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.