русс | укр

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

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

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

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


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

Занятие 5. Упорядочивание списка. Вставление элемента в середину списка.


Дата добавления: 2014-11-28; просмотров: 643; Нарушение авторских прав


Сформируем список целых чисел упорядоченный по неубыванию, т.е. каждый следующий элемент списка должен быть больше или равен предыдущему.

Для решения этой задачи рассмотрим основные части алгоритма, который мы будем воплощать в программе.

После ввода очередного числа с клавиатуры определяем его место в списке. Заметим, что при этом элемент может быть вставлен либо в начало списка, либо в конец его, либо во внутрь. Первый и второй случаи мы уже рассмотрели выше. Остановимся на третьем случае.

Для того чтобы вставить в список элемент со значением Digit между двумя элементами, нужно найти эти элементы и запомнить их адреса (первый адрес – в переменной dx, второй – в рх), после чего установить новые связи с переменной, в которой хранится значение Digit.

Графически это можно представить так:

 

Операторы, выполняющие данную задачу будут следующими:

new(x);

x^.Data := Digit;

px^.Next := x;

x^.Next := dx;

Приведем процедуру InsInto, которая ищет место в списке и вставляет элемент, переданный ей как параметр. В результате сразу получается упорядоченный список. Адрес первого элемента списка хранится в глобальной переменной Head.

Procedure InsInto(Digit : integer; Var Head : Ukazatel );

Var

dx, px, x : Ukazatel ;

Begin

new(x);

x^.Data := Digit;

x^.Next := Nil;

if Head = Nil

then {Если список пуст, то вставляем первый элемент}

Head := x

else

{Если список не пуст, то просматриваем его до тех пор, пока не отыщется подходящее место для x^ или не закончится список}

begin

dx := Head;

px := Head;

while (px<>Nil) and (px^.Data<=Digit) do

begin

dx := px;

px :=px^.Next;

end;

if px=Nil

then {Пройден весь список}

dx^.Next := x {Элемент добавляется в конец списка}

else {Пройден не весь список}

begin

x^.Next := px;



if px=Head

then

Head := x {Вставляем в начало списка}

else

dx^.Next := x; {Вставляем внутрь списка}

end;

end;

End;

Задание. Создайте программу, формирующую упорядоченный список, вставив в нее рассмотренную выше процедуру и процедуру просмотра и вывода на экран элементов списка. Отладьте программу, добавьте комментарий, покажите учителю результат для оценки.

Примеры задач, решаемых с помощью списка

Задание. Просмотрите предложенные решения задач и приготовьтесь объяснить алгоритм их решения учителю. Если необходимо, то наберите программы на компьютере и просмотрите их действие.

Задача 1. Проверить есть ли и сколько раз встречается список М1 в списке М2.

Program BaranovA;

Uses

Crt;

Type

EXS = ^ S;

S = Record

Data : integer;

Next : EXS;

End;

Var

u, x, m1, m2 : EXS;

i, Kol : integer;

Procedure Poisk(Var x1, x2 : EXS);

Var

m3, m4 : EXS;

Begin

Kol := 0;

m3 := m1;

m4 := m2;

while m4 <> Nil do

begin

if m4^.Data = m3^.Data

then

begin

m3 := m3^.Next;

m4 := m4^.Next;

if m3 = Nil

then

begin

Kol := Kol+1;

m3 := m1;

end;

end;

else

begin

m3 := m1;

m4 := m4^.Next;

end;

end;

End;

Procedure Init (Var u : EXS);

Var

y : EXS;

Digit : integer;

Begin

writeln('Введите список. Конец ввода – 0');

u := Nil;

read(Digit);

while Digit <> 0 do

begin

new(y);

y^.Next := Nil;

y^.Data := Digit;

if u = Nil

then

u := y

else

x^.Next := y;

x := y;

read(Digit);

end;

writeln;

End;

Procedure Print(X : EXS);

Begin

while X <> Nil do

begin

write(X^.Data : 5);

X := X^.Next;

end;

readln;

writeln;

End;

Begin

ClrScr;

Init(m1);

Init(m2);

writeln('***Список 1***');

Print(m1);

writeln('***Список 2***');

Print(m2);

Poisk(m1, m2);

writeln('Список 1 встречается в списке 2 ', Kol, ' раз(а)');

readln;

End.

Задача 2. Из текстового файла, состоящего из строк, сформировать список, запросить слово и удалить это слово из списка.

Program ;

Uses

Crt;

Type

EXS = ^ Spisok;

Spisok = record

Data : string;

Next : EXS;

end;

Var

Golova_Spiska, Golova_Spiska_Udalen_ : EXS;

F : text;

S, St : string;

Procedure Smotr(x : EXS);

Begin

TextColor(LightRed);

write('Ваш список...');

while x <> Nil do

begin

writeln (x^.Data,' ');

x := x^.Next;

end;

End;

Procedure reading;

Begin

reset (F);

writeln('Ваш файл...');

while no Eof(F) do

begin

readln (F, St);

writeln (St);

end;

close (F);

End;

Procedure CreateFile;

Begin

writeln('Создание файла');

write('Введите имя файла...');

readln(S);

assign (F, S);

rewrite('Вводите текст в файл (окончание ввода - <Enter>');

repeat

readln(St);

writeln (F, St);

until St = '';

write('Файл создан');

close (F);

readln;

End;

Procedure Proverka;

Var

x, y, u : EXS;

i : integer;

Begin

reset (F);

while not Eof (F) do

begin

readln (F, St[i]);

while i < Length (St) do

begin

new (x);

x^.Next := Nil;

if (St[i] <> '') or (St[i] <> St[Length(St)])

then

x^.Data := x^.Data + St[i];

if u = Nil

then

u := x

else

y^.Next := x;

y := x;

end;

end;

close (F);

Smotr (u);

End;

Begin

ClrScr;

TextColor (White);

CreateFile;

Proverka;

End.

 



<== предыдущая лекция | следующая лекция ==>
Занятие 4. Создание списка путем вставления элементов в начало. | Выберите задачи для самостоятельного решения.


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


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

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

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


 


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

 
 

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

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