пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

pogromirovanie:
» sooqa
Уася:
» History motherfuckers

Стек. Формирование, добавление, исключение элемента из стека. Примеры программ.

Стек — динамическая структура данных, представляющая из себя упорядоченный набор элементов, в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека. Элементы извлекаются из стека в порядке, обратном их добавлению в эту структуру, т.е. действует принцип «последний пришёл — первый ушёл».
Выделим типовые операции над стеком и его элементами: 
-добавление элемента в стек; 
-удаление элемента из стека; 
-проверка, пуст ли стек; 
-просмотр элемента в вершине стека без удаления; 
-очистка стека. 


Размеров памяти стека можно управлять директивой $M (не превышает 64К) 
{$M < размер стека >,mind, MaxD} где < размер стека > от 1к до 664 к (по умолчанию 16 к) 
MinD —минимальный размер динамической памяти (носит ограничительный характер, устанавливает тот объем требуемой памяти при отсутствии которого программа вообще не может выполняться. Если mind=0, то запускается в любом случае). 
maxD- максимальный размер динамической памяти (носит рекомендательный характер. 


Занесение элемента в стек производится аналогично вставке нового элемента в начало списка. Процедура занесения элемента в стек должна содержать два параметра: первый задает вершину стека, в который нужно занести элемент, второй — заносимое значение элемента стека. 


Процедура формирования стека будет иметь следующий вид: 
Procedure FormStack; 
Var 
Stack : EXST; {Текущая переменная} 
Digit : integer; 
Procedure writeStack(Var u : EXST; Digit : integer); 
Var 
x : EXST; 
Begin 
new(x); {выделяем память под хранение нового элемента стека} 
x^.Data := Digit; {заполняем поле данных элемента} 
x^.Next := u; {новый элемент «связываем» со стеком} 
u := x; {созданный элемент определяем как вершину стека} 
End; 
Begin 
Stack := Nil; {инициализация стека} 
writeln('Введите элементы стека. Окончание ввода — 0'); 
read(Digit); 
while Digit < > 0 do 
begin 
writeStack(Stack, Digit); 
read(Digit); 
end; 
End; 


Извлечение элемента из стека 
В результате выполнения этой операции некоторой переменной i должно быть присвоено значение первого элемента стека, и значение указателя на начало списка должно быть перенесено на следующий элемент стека.Procedure readStack(Var u : EXST; Var i : integer); 
Var 
x : EXST; 
Begin 
i := u^.Data; {считываем значение поля данных в переменную} 
x := u; {запоминаем адрес вершины стека} 
u := u^.Next; {переносим вершину стека на следующий элемент} 
dispose(x); {освобождаем память, занятую уже ненужным элементом стека} 
End. 


27.01.2014; 07:47
хиты: 172
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь