Добавление элемента в список

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

Рис. 8.9. Добавление элемента в упорядоченный список

Рис. 8.10. Диалоговое окно программы Упорядоченный динамический список 2

Следующая программа (ее текст приведен в листинге 8.5, а диалоговое окно — на рис. 8.10) формирует список, упорядоченный по полю Фамилия. Данные вводятся в поля редактирования (Edit1 и Edit2) и нажатием кнопки Добавить (Buttoni) добавляются в список таким образом, что список всегда упорядочен по полю Фамилия.

Листинг 8.5. Добавление элементов в упорядоченный список

unit dlist2_;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

procedure ButtonlClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TForm1;

implementation

($R *.DFM}

type

TPStudent=ATStudent; //указатель на тип TStudent

TStudent = record

f_name:string[20]; // фамилия

l_name:string[20]; // имя

next: TPStudent; // следующий элемент списка

end;

var

head: TPStudent; // начало (голова) списка

// добавить элемент в список

procedure TForm1.Button1Click(Sender: TObject);

var

node: TPStudent; // новый узел списка

curr: TPStudent; // текущий узел списка

pre: TPStudent; // предыдущий, относительно curr, узел

begin

new(node); // создание нового элемента списка

node^.f_name:=Edit1.Text; // фамилия

node^.l_name:=Edit2.Text; // имя

// добавление узла в список

// сначала найдем в списке подходящее место для узла

curr:=head;

pre:=NIL;

{ Внимание!

Если приведенное ниже условие заменить

на (node. f_name>curr". f__name) and (currONIL) ,

то при добавлении первого узла возникает ошибка времени

выполнения, т. к. curr = NIL и, следовательно,

переменной curr. *name нет!

В используемом варианте условия ошибка не возникает, т. к.

сначала проверяется условие (curr о NIL), значение которого

FALSE, и второе условие в этом случае не проверяется.

}

while (curr о NIL) and (node.f_name > curr^.f_name) do

begin

// введенное значение больше текущего pre:= curr;

curr:=curr^.next; // к следующему узлу

end;

if pre = NIL then

begin

// новый узел в начало списка

node^. next: =head; head:=node;

end

else

begin

// новый узел после pre, перед

curr node^.next:=рre^.next;

рrе^.next:=node;

end;

Edit1.text:='';

Edit2.text:='';

Edit1.SetFocus;

end;

// отобразить список

procedure TForm1.Button2Click(Sender: TObject);

var

curr: TPStudent; // текущий элемент списка

n:integer; // длина (кол-во элементов) списка

at:string; // строковое представление списка

begin

n:=0;

st: = '';

curr:=head;

while curr <> NIL

do

begin n:=n+l;

st:=st+curr^.f_name+' '+currA.l_name+#13;

curr:=curr^.next;

end; if n <> 0

then ShowMessage('Список: '+ЦЗ+st)

else ShowMessage('В списке нет элементов.');

end;

// начало работы программы

procedure TForm1.FormActivate(Sender: TObject);

begin

head:=NIL; // список пустой

end;

end.

Процедура TFormi.ButtoniClick создает динамическую переменную-запись, присваивает ее полям значения, соответствующие содержимому полей ввода диалогового окна, находит подходящее место для узла и добавляет этот узел в список, корректируя при этом значение указателя узла next, после которого должен быть помещен новый узел.

Рис. 8.11. Пример упорядоченного списка, сформированного программой

Вывод списка выполняет процедура TForml.Button2Сlick, которая запускается нажатием кнопки Показать. После запуска программы и ввода нескольких фамилий, например, в такой последовательности: Иванов, Яковлев, Алексеев, петров, список выглядит так, как показано на рис. 8.11.

 


Знаете ли Вы, что cогласно релятивистской мифологии "гравитационное линзирование - это физическое явление, связанное с отклонением лучей света в поле тяжести. Гравитационные линзы обясняют образование кратных изображений одного и того же астрономического объекта (квазаров, галактик), когда на луч зрения от источника к наблюдателю попадает другая галактика или скопление галактик (собственно линза). В некоторых изображениях происходит усиление яркости оригинального источника." (Релятивисты приводят примеры искажения изображений галактик в качестве подтверждения ОТО - воздействия гравитации на свет)
При этом они забывают, что поле действия эффекта ОТО - это малые углы вблизи поверхности звезд, где на самом деле этот эффект не наблюдается (затменные двойные). Разница в шкалах явлений реального искажения изображений галактик и мифического отклонения вблизи звезд - 1011 раз. Приведу аналогию. Можно говорить о воздействии поверхностного натяжения на форму капель, но нельзя серьезно говорить о силе поверхностного натяжения, как о причине океанских приливов.
Эфирная физика находит ответ на наблюдаемое явление искажения изображений галактик. Это результат нагрева эфира вблизи галактик, изменения его плотности и, следовательно, изменения скорости света на галактических расстояниях вследствие преломления света в эфире различной плотности. Подтверждением термической природы искажения изображений галактик является прямая связь этого искажения с радиоизлучением пространства, то есть эфира в этом месте, смещение спектра CMB (космическое микроволновое излучение) в данном направлении в высокочастотную область. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution