Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список. - 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.

Объяснение кода листинга программы

  1. Создается тип данных pe - указатель на элемент списка.
  2. Создается структура el - элемент списка.
  3. Создается глобальная переменная sag - указатель начала.
  4. Создается глобальная переменная q - текущий элемент в процедуре вывода.
  5. Создается глобальная переменная s - текущий элемент в процедуре создания КОС.
  6. Создается глобальная переменная N - число ячеек.
  7. Определяется функция rus - руссификатор.
  8. Определяется процедура input - процесс ввода элементов в КОС.
  9. Определяется процедура output - процесс вывода КОС на экран.
  10. В основной программе создается указатель начала sag.
  11. Устанавливается указатель s на sag.
  12. Выводится сообщение Введите количество ячеекв КОС:.
  13. Считывается количество ячеек N.
  14. Выполняется процесс ввода элементов в КОС input(q).
  15. Выполняется процесс вывода КОС на экран output(q).
  16. Выводится сообщение Всего кол-во ячеек: и число N.
  17. Программа завершается.

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы