Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список. - Pascal
Формулировка задачи:
Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список.
Решение задачи: «Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список.»
textual
Листинг программы
uses SysUtils; type //структура ячейки pe=^el; //указатель на элемент списка el = record // ЛОС - элемент списка inf: integer; // информационное поле next: pe; // указатель на следующий элемент end; Var //Глобальные переменные для использования в процедурах sag: pe; //указатель начала q: pe; //текущий ук. в процедуре вывода s: pe; //текущий ук. в процедуре создания КОС N: integer; // число ячеек //руссификатор function rus(s:string):string; var i: integer; begin for i:=1 to Length(s) do case s[i] of 'А'..'п': s[i]:=chr(ord(s[i])-64); 'р'..'я': s[i]:=chr(ord(s[i])-16); end;//case rus:=s; end;// конец руссификатора procedure input (var q:pe); //процедура ввода эл-ов в КОС var i:integer; begin For i:= 1 to N do begin New(q); //выделить память для новой ячейки q.inf := i; //заполняем инф.часть s.next := q; //связываем два эл-та цепочкой s:=q; //переход нашего указателя s на созданную ячейку q end; q.next := sag.next; //Даем последней ячейке адрес на заглавный элемент. //итак, сформирован Кольцевой Односвязный список end; procedure output(var q:pe); //процедура вывода КОС на экран begin q:=sag.next; //ставим указатель на начало if (N = 0) then writeln(rus('КОС пуст... печалька')) else begin writeln('------------------'); WriteLn(rus('Вывод КОС на экран: ')); while (q.next <> sag.next) do begin //условие прохода по КОС write(q.inf,' '); q:=q.next; end; //вывод последнего элемента, т.к. в цикле while это пропускается if (q.next = sag.next) then begin write(q.inf, ' '); end; writeln; writeln(rus('Всего кол-во ячеек: '),N); end; end; BEGIN // начало основной программы new(sag); //создаем указатель начала s := sag; //ставим указатель s на него... эт нужно для п. input(q) write(rus('Введите количество ячеекв КОС: ')); readln(N); input(q); // п. ввода эл-ов в КОС output(q); // п. вывода КОС на экран readln; END.
Объяснение кода листинга программы
- Создается тип данных
pe
- указатель на элемент списка. - Создается структура
el
- элемент списка. - Создается глобальная переменная
sag
- указатель начала. - Создается глобальная переменная
q
- текущий элемент в процедуре вывода. - Создается глобальная переменная
s
- текущий элемент в процедуре создания КОС. - Создается глобальная переменная
N
- число ячеек. - Определяется функция
rus
- руссификатор. - Определяется процедура
input
- процесс ввода элементов в КОС. - Определяется процедура
output
- процесс вывода КОС на экран. - В основной программе создается указатель начала
sag
. - Устанавливается указатель
s
наsag
. - Выводится сообщение
Введите количество ячеекв КОС:
. - Считывается количество ячеек
N
. - Выполняется процесс ввода элементов в КОС
input(q)
. - Выполняется процесс вывода КОС на экран
output(q)
. - Выводится сообщение
Всего кол-во ячеек:
и числоN
. - Программа завершается.