Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2008, 23:05   #1
Влдислаав3911
Пользователь
 
Регистрация: 08.05.2008
Сообщений: 13
По умолчанию списки

помогите мне разобраться, не могу сделать процедуру переворачивания списка{ну сделать чтоб список был наоборот}...
вот что я делал:
procedure Doc(var head:PList);
var p,q,h,t:PList;
begin
p:=head^.next;
while p<> nil do
begin
if (p^.a)<0 then
begin
t:=p;
p^.next^.pred:=p^.pred;
p^.pred^.next:=p^.next;
p^.next:=head^.next;
p^.pred:=head;
head^.next^.pred:=p;
head^.next:=p;
p:=t^.next;
end
else
p:=p^.next;
end;
end;
Влдислаав3911 вне форума Ответить с цитированием
Старый 09.05.2008, 12:45   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Непонятен Ваш метод , если он вообще есть. Зачем проверка < 0 ?

Код:
procedure reverse(head:PList);
var p2, q, t:PList;
begin
   p2 := head^.next;      // Указатель на первый элемент
   p2^.pred := nil;       // Отрываем его от головы
   q := head;
   // Найдем указатель на последний элемент
   // Считаем что он есть.
   // В общем случае нужно добавить проверку на его наличие
   while p2.next <> nil do begin
      p2 := p2^.next;
   end;
   // С конца списка добавляем элементы к голове
   while p2 <> nil do begin
      t := p2^.pred;

      p2^.next := nil;
      p2^.pred := q;
      q^.next := p2;

      q := q^.next;
      p2 := t;
   end;
end;
Такое ощущение, что все задачи на списки предлагает один человек. Одинаковые типы элементов, одинаковые имена переменных. Даже ошибки похожи.
alexBlack вне форума Ответить с цитированием
Старый 09.05.2008, 13:10   #3
Влдислаав3911
Пользователь
 
Регистрация: 08.05.2008
Сообщений: 13
По умолчанию

я хотел было написать такую часть,я изменял свою старую прогу, и отправил неправельною. еще я помогал никите перевозчикову, вы наверно его имели ввиду?.
Спасиб что помог.
procedure Doc(var head:PList);
var p,t:PList;
begin
p:=head^.next;
while p<> nil do
begin
t:=p;
p^.next^.pred:=p^.pred;
p^.pred^.next:=p^.next;
p^.next:=head^.next;
p^.pred:=head;
head^.next^.pred:=p;
head^.next:=p;
p:=t^.next;

end;
end;
Влдислаав3911 вне форума Ответить с цитированием
Старый 09.05.2008, 13:20   #4
Влдислаав3911
Пользователь
 
Регистрация: 08.05.2008
Сообщений: 13
По умолчанию

моя идея была в том чтоб брать последующий элемент и вставлять его в начало после head, и так до конца(получается каждый последующий элемент втискивается между head и 1 элементом).
Влдислаав3911 вне форума Ответить с цитированием
Старый 09.05.2008, 13:32   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Влдислаав3911 Посмотреть сообщение
моя идея была в том чтоб брать последующий элемент и вставлять его в начало после head, и так до конца(получается каждый последующий элемент втискивается между head и 1 элементом).
Да, так даже проще. Не придется искать последний элемент.

Код:
procedure reverse2(head:PList);
var p,t:PList;
begin
   p := head^.next;
   head^.next := nil;
   while p <> nil do begin
     t:=p^.next;

     p^.next:=head^.next;
     p^.pred:=head;

     if p^.next <> nil
     then p^.next^.pred := p;
     head^.next := p;

     p:=t;
   end;
end;

Последний раз редактировалось alexBlack; 09.05.2008 в 13:44.
alexBlack вне форума Ответить с цитированием
Старый 10.05.2008, 17:35   #6
Влдислаав3911
Пользователь
 
Регистрация: 08.05.2008
Сообщений: 13
По умолчанию

я понял, большое спасибо!!)))
Влдислаав3911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На списки... Neznau Паскаль, Turbo Pascal, PascalABC.NET 1 02.07.2008 19:49
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40
Списки... Arkuz Компоненты Delphi 2 19.04.2008 22:58
Списки AVer Паскаль, Turbo Pascal, PascalABC.NET 6 06.12.2006 23:05