Иллюстрированный самоучитель по Delphi 7 для начинающих

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

Листинг 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=^TStudent; //указатель на тип 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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.