У вас вопросы?
У нас ответы:) SamZan.net

пустой кольцевой список

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 8.6.2025

Билет 17. Кольцевые списки.

Кольцевые списки, т.е. списки, у которых первый и последний элементы связаны непосредственной связью. Такие списки позволяют осуществлять просмотр (доступ к любому элементу) не только от головы списка, но и от любого элемента списка. При создании кольцевого списка обычно сначала создается "пустой кольцевой список", у которого имеется один элемент, указывающий сам на себя (замкнутый в кольцо). Остальные элементы включаются в этот список друг за другом. Проиллюстрируем работу с кольцевым двунаправленным списком на примере программы, вычисляющей кратчайший путь между станциями кольцевой линии метро.

       program RING_METRO; {Кольцевая линия Московского метро}

       type link=^nest;nest=record forw,back:link;inf:string end;

       var r,r1,start:link;f:text;c,c1,c2:string;dir:Boolean;L:byte;

       procedure insert(el1,el2:link);{вставка el2 после el1}

           begin el2^.forw:=el1^.forw;el2^.back:=el1;el1^.forw^.back:=el2;el1^.forw:=el2;

           end{insert};

       procedure dir_path(var d:Boolean;s1,s2:string);{направление}

       var g:link;j1,j2:byte;er1,er2:Boolean;

           begin j1:=0;j2:=0;g:=start;er1:=false;er2:=false;

            repeat g:=g^.forw;  if g^.inf=s1   then

              repeat g:=g^.forw;j1:=j1+1;er1:=(g^.inf=s1);d:=(2*j1<L);

              until (g^.inf=s2) or (g^.inf=s1)  else  if g^.inf=s2   then

              repeat g:=g^.forw;j2:=j2+1;er2:=(g^.inf=s2);d:=(2*j2>L);

              until (g^.inf=s1) or (g^.inf=s2);

            until (g=start) or (g^.inf=s1) or (g^.inf=s2);if er1 or er2 then

   begin write('Ошибка в названии ');

           if er1  then write('конечной') else write('начальной');writeln(' станции');halt

   end; if j1+j2=0 then begin writeln('Ошибка в названиях станций');halt end

           end {dir_path};

       procedure write_path(d:Boolean;s1,s2:string);{кратчайший путь}

       var p:link;

           begin p:=start; while not(p^.inf=s1) do p:=p^.forw;

             repeat writeln(p^.inf);if d then  p:=p^.forw else p:=p^.back;

             until (p^.inf=s2) ; writeln(p^.inf);

           end {write_path};

       BEGIN writeln('КОЛЬЦЕВАЯ  ЛИНИЯ  МОСКОВСКОГО МЕТРО');

             new(start);r:=start;r^.forw:=r;r^.back:=r;assign(f,'names_st');{$I-}reset(f);{$I+};

            if IOResult<>0 then begin writeln('Не найден файл names_st');halt end;

             L:=1;readln(f,r^.inf);while not eof(f) do{создание кольца }

             begin readln(f,c);new(r1);insert(r,r1);r1^.inf:=c;r:=r1;L:=L+1 end;

             writeln('Задайте начальную и конечную станции:');    readln(c1);readln(c2);            dir_path(dir,c1,c2); writeln('Кратчайший путь:');write_path(dir,c1,c2);

       END{ring_metro}.

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

program z_433_17;

program Z433_17;

uses Z433_17;

Var a:matr;

max,min,eps:real;

i,j:integer;

Begin

for i:=1 to n do

for j:=1 to t do

readln(a[i,j]);

readln(eps);

max(a,max);

min(a,min);

if abs(max-min)<eps then Begin

for i:=1 to n do

for j:=1 to t do

if a[i,j]<0

then a[i,j]:=abs(a[i,j]); end;

for i:=1 to n do

for j:=1 to t do

writeln(a[i,j]);

end.

unit Z433_17;

interface

Const n=5;

Const m=6;

Type matr=array[1..n,1..m]of real;

procedure max(a:matr;Var max:real);

procedure min(a:matr;Var min:real);

implementation

procedure max(a:matr;Var max:real);

Var i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

if a[i,j]<0 then max:=abs(a[i,j]);

for i:=1 to n do

for j:=1 to m do

if a[i,j]<0 and abs(a[i,j])<max

then max:=abs(a[i,j]);

end;

procedure min(a:matr;Var min:real);

Var i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

if a[i,j]>0 then min:=a[i,j];

for i:=1 to n do

for j:=1 to t do

if a[i,j]>0 and abs(a[i,j])<min

then min:=abs(a[i,j]);

end;

end.




1. тема проявляется в виде функционирования молекул
2. Правила проведения занятий физическими упражнениями
3. Пропаганда представляет собой форму коммуникации которая отличается от внушения тем что стремится добить
4. Процесс расчистки создаёт новые направления
5. Навчальний посібник з граматики для студентів 3 курсу факультету іноземних мов - Укладачі- Меркулова Т
6. Реферат- Фактор времени и оценка потоков платежей
7. Безмонетный период
8. Не стремитесь победить противника ~ лучше помогите ему проиграть Как правило сильный и агрессивный в этом
9. симфония означает созвучие
10. Чем выше коэффициент оборачиваемости запасов тем меньше размер денежных средств связанных в запасах