Двунаправленные списки - Pascal

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Двунаправленные списки»

textual
Листинг программы
program spis;
uses crt;
type
pnode=^tnode;
tnode=record
val:integer;
pred,next:pnode;
end;
var
first,last,temp,temp2:pnode;
i,n,x,g:integer;
y:array[1..10] of integer;
 
procedure vvod(var first1,last1:pnode; xx:integer);
begin
if first1=nil then
begin
new(first1);
first1^.next:=nil;
first1^.pred:=nil;
last1:=first1;
end else
begin
new(last1^.next);
last1^.next^.pred:=last1;
last1:=last1^.next;
last1^.next:=nil;
end;
last1^.val:=xx;
end;
 
procedure fib(m:integer);
var i,j,k:integer;
temp,temp2:pnode;
begin
i:=1; j:=1; k:=1;
while k<m do
begin
k:=j+i;
i:=j;
j:=k;
end;
if k=m then
begin
 
while temp^.next<>nil do
begin
temp:=first;
if temp^.next^.val=m then begin
temp2:=temp^.next;
temp2^.pred:=temp^.pred;
temp^.next:=temp2^.next;
temp2^.next:=temp;
temp^.pred:=temp2;
end;
temp:=temp^.next;
end;
end;
end;
 
procedure vivod(first1:pnode);
begin
if first1=nil then
begin
writeln('Spisok pust');
exit;
end;
while first1<>nil do
begin
writeln(first1^.val);
first1:=first1^.next;
end;
end;
 
 
begin
clrscr;
write('n='); readln(n);
for i:=1 to n do
begin
write('x='); readln(x);
vvod(first,last,x);
y[i]:=x;
end;
for i:=1 to n do
begin
fib(y[i]);
end;
vivod(first);
readln;
end.

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

  1. В программе используется структура данных двунаправленный список (дискретный массив).
  2. Переменная first инициализируется как первый элемент списка, а переменная last инициализируется как последний элемент списка.
  3. Функция vvod добавляет новый узел в начало списка. Если список пуст, то создается новый узел и он становится первым элементом списка. Указатель first указывает на новый узел, а указатель last указывает на предыдущий узел. Значение нового узла равно значению переданного аргумента xx.
  4. Функция fib вычисляет последовательность Фибоначчи. Она использует три переменные i, j и k для хранения текущего, предыдущего и следующего чисел в последовательности. Пока k меньше m, значения i, j и k обновляются. Если k равно m, то последовательность завершена и функция возвращает значение m.
  5. Функция vivod выводит список на экран. Она проходит по списку от начала до конца и выводит значение каждого узла.
  6. Основная программа создает список, добавляет в него n элементов, вычисляет последовательность Фибоначчи для каждого элемента и выводит список на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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