русс | укр

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

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

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

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


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

Сортированные списки


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


End.

ReadLn;

WriteLn;

End;

Break;

Begin

R := head;

End;

Begin

End;

Begin

Else

End

Begin

Then

ReadLn(poisk);

WriteLn;

Repeat

New(r);

WriteLn;

WriteLn;

WriteLn;

ClrScr;

End;

WriteLn;

End;

Begin

Begin

End;

Repeat

Begin

Procedure Formir_spisok;

End;

Uses CRT;

Program Spisok;

Такого элемента в списке нет

5 -3 -2 -12

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

5 -3 17 -12

Создание списка

End;

Begin

Else

r := q; иначеподтягиваем r к q

q := q^.Next; и делаем шаг по списку указателем q

сейчас ссылка q указывает на элемент -3 , то есть q^.Inf = -3, а поле q^.Next содержит адрес элемента -12. Ссылка r указывает на предыдущий элемент списка, то есть на 5, а в r^.Next содержится адрес удаляемого элемента - r^.Next = q :

3. в ссылочное поле r^.Next помещается адрес, хранящийся в q^.Next, то есть адрес элемента -12:

r^.Next := q^.Next;

Сейчас оба элемента (5 и -3) будут соединены с элементом -12,

 

а связь между элементами 5 и -3 разрывается.



4. освобождаем память от удаленного элемента -3 и возвращаем указатели q и r в голову списка:

Dispose(q); удаляем из памяти элемент -3

q := head^.Next; на первый элемент списка

r := head; на указатель на голову списка

 

Пример: сформировать список из элементов 5, -3, 17, -12 и вывести его на экран. Удалить из списка несколько элементов (конец удаления – число 0), каждый раз выводя новый список на экран.

Интерфейс:

Первое число: -12

Следующее число: 17

Следующее число: -3

Следующее число: 5

Следующее число: 0

Введено чисел: 4

Введенные числа:

Удаляемый элемент: 17

Новый список:

Удаляемый элемент: 5

Новый список:

-3 -2 -12

Удаляемый элемент: 10

Список:

-3 -2 -12

Удаляемый элемент: 0

Список:

-3 -2 -12

Программа:

Type TPoint = ^TElement;

TElement = Record

Inf: Integer;

Next: TPoint;

Var head, q, r : TPoint;

poisk: Integer;

flag: 0..1; флаг поиска (0 – элемент не найден)

New(head); head -указатель на голову списка

head^.Inf := 0;количество элементов в списке

head^.Next := Nil; списка еще нет

New(q); формируем первый элемент

Write(‘Первое число: ’);

ReadLn(q^.Inf);вводим его информационную часть

If (q^.Inf=0)если ввели 0,

Then Exit; то выходим из процедуры

head^.Inf := 1;в списке один элемент

q^.Next := head^.Next;вставляем его в голову списка

head^.Next := q; в head^.Next адрес головы списка

New(q);формируем очередной элемент

Write(‘Очередное число: ’);

ReadLn(q^.Inf);вводим его информационную часть

If (q^.Inf=0) если ввели 0,

Then Break;то выходим из цикла ввода

head^.Inf := head^.Inf + 1;увеличиваем счетчик элементов на 1

q^.Next := head^.Next;вставляем элемент в голову списка

head^.Next := q;в head^.Next адрес головы списка

Until (q^.Inf = 0);

Procedure Vyvod_spisok; процедура вывода списка

q := head^.Next;текущую ссылку – на первый элемент

While (q <> Nil) Doпока не конец списка

Write(q^.Inf:5); выводим очередной элемент

q := q^.Next; ссылку – на следующий элемент

Begin головная программа

WriteLn(‘Создание списка’);

Formir_spisok; обращение к процедуре создания списка

WriteLn(‘Введено чисел: ’, head^.Inf);

WriteLn(‘Введенные числа:’);

Vyvod_spisok; обращение к процедуре вывода списка

WriteLn(‘Удаление элементов из списка’);

Write(‘Удаляемый элемент: ’);

If (poisk = 0) если он равен нулю,

Then Break; то выходим из цикла удаления

flag := 0; флаг поиска равен нулю – удаляемый элемент пока не найден

q := head^.Next; поисковый указатель q – на первый элемент списка,

r := head; тормозной r - на голову списка

While (q <> Nil) Do пока не конец списка

If (q^.Inf = poisk) ищем нужный элемент

flag := 1; если элемент найден:

Break; выходим из цикла поиска

r := q; иначе подтягиваем r к q

q := q^.Next; иделаем шаг по списку

If (flag = 0) Then если элемент не найден:

WriteLn(‘Такого элемента в списке нет’);

WriteLn(‘Список:’);

Vyvod_spisok; выводим список

Continue; и продолжаем цикл удаления

r^.Next := q^.Next; если элемент найден,

Dispose(q); то удаляем его из списка и освобождаем память

head^.Inf := head^.Inf - 1; уменьшаем счетчик элементов на единицу

q := head^.Next; возвращаем указатели в голову списка

If (head^.Inf = 0) Then если в списке не осталось элементов

WriteLn(‘Список пуст’);

WriteLn(‘Новый список:’);

Vyvod_spisok; выводим новый список

Until (poisk = 0); окончание цикла удаления элементов

WriteLn(‘Список:’);

Vyvod_spisok; выводим окончательный список

Таким образом, операции вставки и удаления элементов из списка представляют собой изменение значений ссылочных полей определенных элементов списка.

Широкое применение связные списки получили при решении задач сортировки последовательностей данных.

Пусть имеется связный список из трех чисел, расположенных по возрастанию от головы к хвосту списка: 3, 5, 12.

Добавим в описание переменных новую ссылку v , которую будем использовать для формирования нового элемента:

Var head, q, r, v: TPoint;

Остальные ссылки выполняют следующие функции:

head – ссылка на первый элемент списка,

r - поисковая ссылка,

v - всегда отстает от нее на шаг, используется для переадресации элементов списка.

Список сформирован, и значениями переменных head и r является ссылка на первый элемент списка, а переменная q отстает на шаг от r и ссылается на head:

 

 

Необходимо вставить элемент 7 на свое место в списке, то есть перед12.

Для включения нового элемента в готовый список выполняются следующие действия:

1. создается новый элемент и заполняется его информационное поле:

New(v);

v^.Inf := 7;

2. в списке находится первый элемент, больший вставляемого, то есть элемент, перед которым должен стоять новый, в данном случае элемент 12; для этого используем переменную r :

While (r <> Nil) Do пока не дошли до конца списка

If (r^.Inf <= v^.Inf) Then если текущий еще меньше вставляемого,



<== предыдущая лекция | следующая лекция ==>
Удаление элемента из списка | Бинарные деревья


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


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

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

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


 


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

 
 

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

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