IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> удаление, Сортированный список
Nikolay
сообщение 17.11.2005 0:01
Сообщение #1


Гость






Не получается сделать удаление из списка
Должно быть удаление из середины списка, а не только из начала

Код

program sortspisok;
uses crt;
type
    p_sort=^sspis;
    sspis=record
    nomer:string[20];
    next:p_sort;
    end;
var
    head:p_sort; {указатель на первый элемент списка}
    cur:p_sort; {текущий элемент списка}
    p:p_sort; {элемент, после которого вставляем новый узел}
    del:p_sort;
    nomer:string[20]; {элемент ввод с клавиатуры}
    node: p_sort; {новый узел списка}
    c: char;
    f: string;
    n: byte;
begin
    repeat
    clrscr;
    writeln ('сортированный список');
    writeln ('');
    writeln (' a - добавить элемент');
    writeln (' d - удалить элемент');
    writeln (' f - найти');
    writeln (' e - выйти');
    writeln;
    writeln ('======');
    if head = nil
    then writeln ('<>')
    else begin
           cur := head;
           repeat
           writeln (cur^.nomer);
           cur:=cur^.next;
           until cur = nil;
         end;
    writeln ('======');
    c := readkey;
{выход}
    if c = 'e' then exit;
{удаление}
   if c = 'd' then
   if not (head = nil) then
     begin
       write ('удаление элемента : ');
       readln (f);
       cur := head;
       del := nil;
       repeat
       if (cur^.nomer = f) then
         begin

          del :=cur^.next;
         cur^:=del^;
         del^.next:=nil;
{          dispose (del);}
{          del:=NIL;}
         end;
{         cur^.next := cur^.next^.next;}

{          keypressed;}           until cur<>nil;

     end;


{поиск}
    if c = 'f' then
    begin
      write ('найти элемент : ');
      readln (f);
      cur := head;
      n := 0;
      repeat
      if cur^.nomer = f
      then writeln ('..элемент №', n, ' = ', f);
      cur := cur^.next;
      inc (n);
      until cur = nil;
      repeat until keypressed; end;
{добавление }
     if c = 'a' then
     begin
       write('элемент ');
       readln(nomer);
       if length (nomer)<>0 then begin
{введена строка символов}
       new(node); {создадим новый элемент списка}
       node^.nomer:=nomer;
       node^.next:=NIL;
{ищем место для вставки нового элемента}
       cur:=head;
       p:=NIL;
{будем сравнивать введенное значение со значением текущего узла}
       while(nomer>cur^.nomer) and (cur<>NIL) do
       begin
{введенное значение больше текущего}
         p:=cur;
         cur:=cur^.next; {к следующему узлу}
       end;
       if p = NIL then
       begin
{узел в начало списка}
         node^.next:=head;
         head:=node;
       end
       else
       begin
         node^.next:=p^.next;
         p^.next:=node;
       end;
  end;
end;
    until length(nomer)=0; { элемент не введен, нажата клавиша < Enter > }
{ распечатаем введенный список }
    cur:=head;
{ writeln('Сортированный  список ');
    while cur<>NIL do begin
         writeln(cur^.nomer);
         cur:=cur^.next;   end;}
    readln;
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"