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