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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2016, 20:33   #1
Екатерина57
Пользователь
 
Регистрация: 11.10.2015
Сообщений: 63
По умолчанию Двусвязные списки

Помогите найти max элемент и удалить его.
Вот кусочек кода:
Код:
type sps=^count;
     count=record
           data:integer;
           prev:sps;
           next:sps;
          end;
var p:sps;
    first:sps;
    n,i:integer; 
begin

repeat
write('Размер списка n>1 n=');
readln(n);
until n>1;
for i:=1 to n do
 begin
  new(p);
  readln(p^.data);
  if first=nil then
   begin
    p^.next:=p;
    p^.prev:=p;
    first:=p;
   end
  else 
   begin
    p^.next:=first;
    p^.prev:=first^.prev;
    first^.prev^.next:=p;
    first^.prev:=p;
   end;
 end;
p:=first;
writeln('В прямом порядке');
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.06.2016 в 21:25.
Екатерина57 вне форума Ответить с цитированием
Старый 19.06.2016, 21:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
type
  sps = ^count;
  count = record
    data: integer;
    prev: sps;
    next: sps;
  end;

var
  first, p, pmax: sps;
  n, i: integer;

begin

  repeat
    write('Размер списка n>1 n=');
    readln(n);
  until n > 1;
  for i := 1 to n do
  begin
    new(p);
    // readln(p^.data);
    p^.data := i * 10;
    if first = nil then
    begin
      p^.next := p;
      p^.prev := p;
      first := p;
    end
    else
    begin
      p^.next := first;
      p^.prev := first^.prev;
      first^.prev^.next := p;
      first^.prev := p;
    end;
  end;
  p := first;
  writeln('В прямом порядке');
  while (p <> nil) do
  begin
    Write(p^.data, ' ');
    p := p^.next;
    if p = first then p := nil
  end;
  WriteLn;

  p := first;
  writeln('В обратном порядке');
  if (p <> nil) then begin
    repeat
      p := p^.prev;
      Write(p^.data, ' ');
      if p = first then p := nil;
    until p = nil;
  end;

  { удалить максимальный }
  pmax := first;
  p := first;
  while (p <> nil) do
  begin
    if p^.data > pmax^.data then pmax := p;
    p := p^.next;
    if p = first then p := nil
  end;
  WriteLn;
  WriteLn('max = ', pmax^.data);

  if pmax = first then first := pmax^.next;
  pmax^.prev^.next := pmax^.next;
  pmax^.next^.prev := pmax^.prev;
  Dispose(pmax);

  p := first;
  writeln('В прямом порядке');
  while (p <> nil) do
  begin
    Write(p^.data, ' ');
    p := p^.next;
    if p = first then p := nil
  end;
  WriteLn;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2016, 23:03   #3
Екатерина57
Пользователь
 
Регистрация: 11.10.2015
Сообщений: 63
По умолчанию

Огромное спасибо!!!
Екатерина57 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязные списки (С) tanya-tanya Помощь студентам 2 15.08.2012 07:50
Двусвязные списки vimeo Общие вопросы C/C++ 2 03.05.2010 19:31
двусвязные списки ai\ekcah^p Общие вопросы C/C++ 11 06.06.2009 19:13
Двусвязные списки Serp Помощь студентам 3 14.04.2009 16:13