русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Удаление элемента из линейного однонаправленного списка


Дата добавления: 2015-07-23; просмотров: 1290; Нарушение авторских прав


Удаление некоторого элемента из списка, сформированного по принципу стека, и удаление элемента из списка, сформированного по принципу «очереди», программно реализуется одинаково. Единственное отличие – способ формирования списка, который определяет местоположение указателя списка (указатель указывает на последний элемент списка в случае стека и на первый элемент списка в случае «очереди»).

Program Primer1; Uses Crt; Type Spisok = ^ Zveno; Zveno = Record Elem : Integer; Next : Spisok; End; Var L : Spisok; E : Integer; Procedure Form(Var L1 : Spisok); Procedure Delete(Var L1: Spisok; E1: Integer); Label 1; Var X, Pr : Spisok; Flag : Boolean; Begin Flag:=False; X:=L1; If L1 <> Nil Then If L1^.Elem = E Then Begin Flag:=True; L1:=L1^.Next; Dispose(X); End Else Begin Pr:=X; X:=X^.Next; End Else Begin Writeln(‘Пустой список’); Goto 1; End; While (X <> Nil) and (not Flag) Do Begin If X^.Elem = E Then Begin Flag:=True; Pr^.Next:=X^.Next; Dispose(X); End Else Begin Pr:=X; X:=X^.Next; End; End; If Flag Then Writeln(‘Е=’,E,’ удален’); Else Writeln(‘Е=’,E,’ не найден’); 1: End; Procedure Wywod(L1 : Spisok); {тип – указатель на тип-запись} {тип - запись} {информационное поле записи} {указатель на следующее звено списка} {указатель} {искомый элемент списка} {процедура формирования списка} {процедура поиска и удаления элемента Е} {X – рабочая переменная} {Pr –указатель на предыдущее звено} {флаг того, что Е был найден и удален} {элемент Е еще не найден} {инициализация рабочей переменной} {если список не пустой} {то если последний элемент равен Е} {то установка флага} {предпосл. элемент теперь последн. в списке} {удаление бывшего последнего элемента - } {возврат памяти в кучу} {иначе} {текущий указатель перемещаем на} {предпоследний элемент} {если список пустой, то} {вывод сообщения «Пустой список»} {переход на метку 1 и выход из п/п} {пока не достигнут конец списка} { и не найден элемент Е} {если текущий элемент равен Е} {то установка флага} {изменение указателя следующего элемента} {удаление Е из списка – возврат памяти} {иначе текущий элемент теперь следующий} {а предыдущий теперь текущий} {конец цикла} {если Е был найден} {то вывод «Элемент Е удален»} {иначе вывод «Элемент Е не найден»} {конец процедуры Delete} {процедура вывода списка на экран}

В процедуре Delete осуществляется удаление звена с элементом Е. При удалении звена рассматриваются пять случаев: а) список не существует; б) удаление первого звена; в) удаление среднего звена; г) удаление последнего звена; д) элемент Е не найден. Выход из процедуры происходит, как только звено Е удалено (по флагу Flag=True) или если достигнут элемент списка, у которого в поле Next записано значение Nil (первый элемент стека или последний элемент «очереди»), но элемент Е не найден. Для определенности пусть список сформирован по принципу «очереди».



Случай а) Если список не существует (список пустой), то на экран выводится сообщение «Пустой список» и происходит выход из процедуры Delete.

Рассмотрим работу процедуры Delete в случаях б) – г) на примере списка из 3-х звеньев.

Пусть исходный список имеет вид:

 
 


Случай б) Удаление первого звена списка:

1) Flag:=False;

X:=L1;

 

2) If L1 <> Nil

Then If L1^.Elem = E

Then Begin

Flag:=True;

L1:=L1^.Next;

 

3) Dispose (X);

Случай в) Удаление среднего звена:

1) Flag:=False;

X:=L1;

 

2) If L1 <> Nil

Then …

Else Begin

Pr:=X;

X:=X^.Next;

End

 

3) While (X <> Nil) and (not Flag)

Do Begin

If X^.Elem = E

Then Begin

Flag:=True;

Pr^.Next:=X^.Next;

 

4) Dispose(X);

Случай г) Удаление последнего звена:

1) Flag:=False;

X:=L1;

 

2) If L1 <> Nil

Then …

Else Begin

Pr:=X;

X:=X^.Next;

End

3) Pr:=X;

X:=X^.Next;

4) If X^.Elem = E

Then Begin

Flag:=True;

Pr^.Next:=X^.Next;

 

4) Dispose(X);

 

Случай д) Если список существует, но искомый элемент в нем не найден, то на экран выводится сообщение «Элементе Е не найден».

Примечание. Если рассматривать вышесказанное (удаление элемента из списка) в отношении списка, сформированного по принципу стека, то все рисунки будут те же, но формулировки различных случаев изменяться так:

а) список не существует - то же, что и для «очереди» в этом случае;

б) удаление последнего звена (т. к. в случае стека, L1 будет указывать на последний элемент списка после формирования) – рисунки те же, что и в случае б) для «очереди»;

в) удаление среднего звена (аналогично случаю в) для «очереди») - рисунки те же, что и в случае б) для «очереди»;

г) удаление первого звена (т. к. в случае стека, указатель Nil будет иметь первый элемент списка после формирования) – рисунки те же, что и в случае г) для «очереди»;

д) список существует, но искомый элемент в нем не найден – то же, что и для «очереди» в этом случае.



<== предыдущая лекция | следующая лекция ==>
Пояснения к программе | 


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.252 сек.