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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 16:55   #1
flecso
бодрствую
 
Аватар для flecso
 
Регистрация: 07.02.2010
Сообщений: 5
Вопрос Односвязный линейный список

Создать односвязный линейный список со слов строки, расположив их за алфавитным порядком.Вычислить количество повторений каждого слова в списке

Списки учили год назад аж целую пару.Полазил по инету и из кусков примеров что-то создал.Сделал только ввод и вывод списка.
Код:
program spisok;
uses crt;
type
  ptr = ^Item;
  Item = record
    data: string;
    next: ptr;
  end;
var
  head: ptr;
  newptr, current, previous: ptr;
  ch: char;
  str: string;
  flag: boolean;

procedure createfirstitem;
begin
  head := newptr;
  head^.next := nil;
end;

procedure isertinbeginning;
begin
  newptr^.next := head;
  head := newptr;
end;

procedure searchplaceinsert;
begin
  current := head;
  repeat
    previous := current;
    current := current^.next;
    if current = nil then
      flag := true
    else
      flag := current^.data >= str;
  until flag;
end;

procedure insertintomiddle;
begin
  previous^.next := newptr;
  newptr^.next := current;
end;


procedure vstavka;
begin
  writeln('vvedite element ->');
  readln(str);
  new(newptr);
  newptr^.data := str;
  if head = nil then createfirstitem
  else
    if str <= head^.data then isertinbeginning
    else
    begin
      searchplaceinsert;
      insertintomiddle;
    end
end;

procedure vuvod;
begin
  current := head;
  if current = nil then
    writeln('spisok pyst')
  else
  begin
    writeln('vuvod spiska');
    repeat
      write(current^.data, '');
      current := current^.next;
    until current = nil;
  end;
  writeln;
end;

begin
  head := nil;
  clrscr;
  vstavka;
  vuvod;
  writeln;


end.
вопросы
1.что лишнее ,что добавить?
2.как сделать сортировку за алфавитом?
3.ну и как посчитать повторения каждого слова?
Сам вряд ли напишу,просьба либо помочь ,либо направить на похожие примеры по моим вопросам



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


p.s. а ещё позволил себе отформатировать ваш код со стандартными отступами. так приятнее и понятнее...

Последний раз редактировалось Serge_Bliznykov; 13.05.2012 в 02:35.
flecso вне форума Ответить с цитированием
Старый 13.05.2012, 02:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

1. на первый взгляд - нормально.
и, если я не ошибаюсь, Вы же его уже создаёте сортированным (при добавлении записи она, судя по коду, помещается в нужное место списка).

2. Если сортировка нужна (см. моё замечание в п.1), то сортировку надо делать любым способом. только нужно менять не элементы друг с другом (как при сортировке массива), а указатели...
посмотрите, вот в ЭТУ, например, тему

3. можно много способов придумать.
я бы предложил воспользоваться "в корыстных" целях тем фактом, что список у Вас отсортирован по алфавиту. Одинаковые слова будут идти ПОДРЯД.
а значит. заводим счётчик слов.
заносим туда ЕДИНИЦУ. берём переменную, например, CurWord, где мы будем хранить текущее слово (в начале туда надо занести ПЕРВОЕ слово из списка.
потом, начиная со следующего элемента, в цикле проверяем - если слово в списке равно CurWord - то наращиваем счётчик. Если не равно или дошли до конца списка - то выводим содержимое CurWord и счётчик. если ещё не конец, то в CurWord новое слово из списка, в счётчик - единицу...

писал я словами алгоритм дольше, чем это записывать в коде на Паскаль!!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Односвязный линейный список vadiprog Помощь студентам 1 01.05.2012 21:27
С++ линейный односвязный список Lady IcE Помощь студентам 3 25.04.2011 20:24
Линейный-односвязный список Айдар Помощь студентам 1 01.06.2010 10:20
линейный односвязный список на С - что это?? о_О aka_Kiss Помощь студентам 8 22.12.2009 01:39
Линейный односвязный список Absinth Помощь студентам 4 11.11.2008 20:29