ir – указатель на конец структуры;
ip – указатель на текущую резервируемую память;
insert4 – указатель на 4-ю переменную стека;
insert5 – указатель на 5-ю переменную стека;
inserti – указатель на динамическую переменную, вставляемую между 4-м и 5-м элементами стека;
k – счетчик;
l – записываемое или считываемое из стека число.
Сначала ir присваивается nil, т.е. указатель не указывает ни на какой участок памяти.
В цикле for происходит заполнение стека по следующему алгоритму. У пользователя запрашивается число, которое записывается в обычную переменную l. Резервируется участок памяти под указатель ip. В захваченный участок памяти записывается значение l и значение указателя ir (первый раз ir указывает на nil). Т.е. теперь ip указывает на nil. Переменная ir, в свою очередь, связывается с участком памяти, в который сейчас производилась запись. В итоге, после первой итерации получается структура, где первый элемент имеет указатель на nil, а переменная ir указывает на этот элемент. По окончании работы цикла for получается линейная динамическая структура данных стекового типа, где первый элемент указывает на nil, а последний элемент помечен (указан) переменной ir.
В цикле for помимо прочего, происходит связывание указателей insert4 и insert5 с четвертым и пятым элементами структуры соответственно. Когда происходит пятая итерация цикла (k = 5), то указатель-переменная ip хранит адрес пятого элемента, поэтому ее значение присваивается insert5. В следующей итерации цикла ip изменится, а в указателе insert5 сохранится адрес пятого элемента. В пятом элементе хранится адрес на четвертый элемент, который записывается в переменную insert4.
Вставка нового элемента структуры между 4-й и 5-й динамическими переменными происходит так. У пользователя запрашивается число, которое записывается в переменную l. Резервируется участок памяти, адрес которого помещается в указатель inserti. В содержательную часть этой области записывается значение l. Далее, в указывающую часть этой области записывается ссылка на четвертый элемент структуры (его адрес хранится в переменной insert4). Пятый элемент стека, уже не должен ссылаться на четвертый, он должен указывать на элемент, который указан переменной inserti.
Для вывода элементов стека на экран также используется цикл for. Обход стека возможен только с его конца. На конец стека указывает переменная ir, значение которой присваивается ip. Далее из этого участка памяти извлекается число, записывается в l и выводится на экран. Указателю ir присваивается значение указывающей части ip, т.е. ir теперь указывает на следующий элемент (правильней сказать, предыдущий элемент стека).
type intp = ^intrec; intrec = record i: integer; p: intp end; var ip, ir, inserti, insert4, insert5: intp; k, l: integer; begin ir := nil; writeln('Введите 10 чисел.'); for k := 1 to 10 do begin readln(l); new(ip); ip^.i := l; ip^.p := ir; ir := ip; if k = 5 then begin insert5 := ip; insert4 := ip^.p end end; writeln; writeln('Введите еще одно число.'); readln(l); new(inserti); inserti^.i := l; inserti^.p := insert4; insert5^.p := inserti; for k := 1 to 11 do begin ip := ir; l := ip^.i; write(' ',l); ir := ip^.p; dispose(ip) end; readln end.
Программа запрашивает 10 чисел, которые вводятся в столбик. Если ввести числа 1 2 3 4 5 6 7 8 9 10, а затем добавить число 25, то программа выдаст такую строку:
10 9 8 7 6 5 25 4 3 2 1.
Комментарии
Деловое предложение администратору pas1.ru
Ваш сайт - pas1.ru показался мне очень привлекательным и перспективным.
Хочу приобрести рекламное место для баннера в шапке Вашего сайта.
Какова будет стоимость данной услуги?
Оплачивать буду через WebMoney, 50% сразу, а 50% через 2 недели.
И еще, адрес моего сайта http://megasto.com.ua/ - он не будет противоречть тематике Вашего сайта?
Напишите о Вашем решении мне на почту [email protected]
Заранее благодарен за оперативный ответ.
Для баннера здесь
Для баннера здесь посещаемость достаточно низкая, вряд ли вырастет и аудитория преимущественно школьники.
Однако данный сайт есть в системе sape.