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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 23:29   #1
illuminato
 
Регистрация: 18.12.2012
Сообщений: 9
Восклицание Поиск элементов [pascal]

Здравствуйте, подскажите как определить максимальную повторяющуюся последовательность значений в двухсвязном списке. или размер этой последовательности?

Это для этой задачи: Задан двунаправленный список, содержащий целочисленные значения. Удалить из указанного списка серии максимальной длины.
illuminato вне форума Ответить с цитированием
Старый 13.05.2013, 09:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да так же, как и в обычном массиве.
запоминаем значение первого элемента. Счётчик_текущий = 1
перебираем последующие элементы. Если значение совпадает с запомненным, тогда счётчик_текущий = счётчик_текущий + 1
если не совпадает (новая серия началась), сравнваем счётчик_текущий с максимальным значением. Если он больше, то запоминаем номер (адрес) серии и максимальную длину.
повторяем, пока все элементы не будут рассмотрены.

после удаляем найденную серию.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2013, 09:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
illuminato
Показывай как формируешь список.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2013, 23:51   #4
illuminato
 
Регистрация: 18.12.2012
Сообщений: 9
По умолчанию

Stilet,
Код:
Program Spisok_dn;
uses
  crt; 
type
  Tinf=integer;
  List=^TList;  
  TList=record 
    data:TInf;
    next, 
    prev:List; 
  end;
  
procedure AddElem(var nach,ends:List;znach1:TInf);
begin
  if nach=nil then
  begin
    Getmem(nach,SizeOf(TList)); 
    nach^.next:=nil; 
    nach^.prev:=nil; 
    ends:=nach; 
  end
  else 
  begin
    GetMem(ends^.next,SizeOf(Tlist));
    ends^.next^.prev:=ends; 
    ends:=ends^.next;
    ends^.next:=nil; 
  end;
  ends^.data:=znach1;
end;


procedure Print(spis1:List);
begin
  if spis1=nil then
  begin
    writeln('‘¯¨á®ª ¯ãáâ.');
    exit;
  end;
  while spis1<>nil do
  begin
    Write(spis1^.data, ' ');
    spis1:=spis1^.next
  end;
end;



var
 SpisNach, 
  SpisEnd,   
  tmpl:List; 
  znach,a,b:integer;
  ch:char;
  n:integer;
  i:byte;
begin

i:=1;
While LowCase(ch)<>chr(110) do begin
write('Введите элемент:  ',i,' : ');
readln(znach);
AddElem(SpisNach,SpisEnd,znach);
Writeln('Продолжить ввод(Y/N): ');
read(ch);
inc(i);
Writeln;
end;
Writeln('Вывод:');
print(SpisNach);


     
 end.
illuminato вне форума Ответить с цитированием
Старый 29.05.2013, 13:24   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да так же, как и в обычном массиве.
запоминаем значение первого элемента. Счётчик_текущий = 1
перебираем последующие элементы. Если значение совпадает с запомненным, тогда счётчик_текущий = счётчик_текущий + 1
если не совпадает (новая серия началась), сравнваем счётчик_текущий с максимальным значением. Если он больше, то запоминаем номер (адрес) серии и максимальную длину.
повторяем, пока все элементы не будут рассмотрены.

после удаляем найденную серию.
Странно...
"фывфыва"
Максимальная повторяющаяся последовательность "фыв", после удаления всех таких последовательностей должно остаться "а".
Как это соотносится с предложенным алгоритмом?
s-andriano вне форума Ответить с цитированием
Старый 29.05.2013, 18:54   #6
illuminato
 
Регистрация: 18.12.2012
Сообщений: 9
По умолчанию

s-andriano, Счётчик_текущий = 2 Если значение совпадает с предыдущем, тогда счётчик_текущий = счётчик_текущий + 1
если не совпадает (новая серия началась), сравниваем счётчик_текущий с максимальным значением. Если он больше, то запоминаем новое значение.
Повторяем, пока все элементы не будут рассмотрены. Далее удаляем последовательности длина которых равна счётчику. Вот такой примерно алгоритм, только как это реализовать я не знаю.
illuminato вне форума Ответить с цитированием
Старый 29.05.2013, 19:34   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

illuminato, в приведенном мною примере ни один символ не повторяется подряд, и в то же время существует повторяющаяся последовательность.
Сдается мне, Вы решаете совсем не ту задачу, условие которой содержится в 1-м посте.
Перечитайте его - там речь о повторяющейся последовательности, а не о последовательности из повторяющихся символов.
s-andriano вне форума Ответить с цитированием
Старый 29.05.2013, 19:55   #8
illuminato
 
Регистрация: 18.12.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
illuminato, в приведенном мною примере ни один символ не повторяется подряд, и в то же время существует повторяющаяся последовательность.
Сдается мне, Вы решаете совсем не ту задачу, условие которой содержится в 1-м посте.
Перечитайте его - там речь о повторяющейся последовательности, а не о последовательности из повторяющихся символов.
Нет, я думаю там последовательности из одинаковых значений. например 1,2,3,3,3,5,6,8,8,8,8,7,7,7,5,5,5,5. и выходным списком уже будет: 1,2,3,3,3,5,6,7,7,7. Но в другом случаи, где вы описали, думаю задача будет намного сложнее.
illuminato вне форума Ответить с цитированием
Старый 29.05.2013, 20:27   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от illuminato Посмотреть сообщение
Нет, я думаю...
А условие читать не пробовали?
s-andriano вне форума Ответить с цитированием
Старый 29.05.2013, 20:43   #10
illuminato
 
Регистрация: 18.12.2012
Сообщений: 9
По умолчанию

s-andriano,
Цитата:
Задан двунаправленный список, содержащий целочисленные значения. Удалить из указанного списка серии максимальной длины.
Серия - последовательность повторяющихся элементов.
illuminato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы поиск элементов танкек Паскаль, Turbo Pascal, PascalABC.NET 2 28.02.2012 10:11
Поиск элементов окна -Flasher- Общие вопросы Delphi 11 27.10.2010 15:46
Поиск элементов junkie Паскаль, Turbo Pascal, PascalABC.NET 2 07.06.2009 17:21
поиск элементов массива omar22 PHP 5 30.04.2009 13:01
Поиск одинаковых элементов Expected } Общие вопросы C/C++ 0 08.01.2009 15:54