КАТЕГОРИИ: Архитектура-(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;
Дата добавления: 2014-01-20; Просмотров: 410; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |