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

Списки. Упорядоченный список.

Следующая программа (ее текст приведен в листинге 8.4) формирует список студентов, добавляя фамилии в начало списка. Данные вводятся в поля редактирования диалогового окна программы (рис. 8.8) и добавляются в список нажатием кнопки Добавить (suttoni).

Иллюстрированный самоучитель по Delphi 7 для начинающих › Типы данных, определяемые программистом › Списки. Упорядоченный список.
Рис. 8.8. Окно программы Динамический список 1

Листинг 8.4. Добавление элемента в начало динамического списка.

unit dlist1_; interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCTRLs;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit; // фамилия
Edit2: TEdit; // имя
Button1: TButton; // кнопка Добавить
Button2: TButton; // кнопка Показать
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(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 TForml.Button1Click(Sender: TObject);
var
curr: TPStudent; // новый элемент списка
begin
new(curr); // выделить память для элемента списка
curr^.f_name: = Edit1.Text;
curr^.l_name: = Edit2.Text;
// добавление в начало списка
curr^.next: = head; head: = curr;
// очистить поля ввода
Edit1.text: = ''; Edit2.text: = ";
end;
// вывести список
procedure TForml.Button2Click(Sender: TObject);
var
curr: TPStudent; // текущий элемент списка
n:integer; // длина (кол-во элементов) списка
st:string; // строковое представление списка
begin n: = 0; st: = '';
curr: = head; // указатель на первый элемент списка
while curr <> NIL do begin
n: = n + 1;
st: = st + curr^.f_name + ' ' + curr^.1_name
+#13; curr: = curr^.next;
// указатель на следующий элемент end;
if n <> 0
then ShowMessage('Список:' + #13 + st)
else ShowMessage('В списке нет элементов.');
end;
end.

Добавление элемента в список выполняет процедура TForm1.Button1Click, которая создает динамическую переменную-запись, присваивает ее полям значения, соответствующие содержимому полей ввода диалогового окна, и корректирует значение указателя head.

Вывод списка выполняет процедура TForm1.Button2Click, которая запускается нажатием кнопки Показать. Для доступа к элементам списка используется указатель curr. Сначала он содержит адрес первого элемента списка. После того как первый элемент списка будет обработан, указателю curr присваивается значение поля next той записи, на которую указывает curr. В результате этого переменная curr содержит адрес второго элемента списка. Таким образом, указатель перемещается по списку. Процесс повторяется до тех пор, пока значение поля next текущего элемента списка (элемента, адрес которого содержит переменная curr) не окажется равно NIL.

Упорядоченный список

Как правило, списки упорядочены. Порядок следования элементов в списке определяется содержимым одного из полей. Например, список с информацией о людях обычно упорядочен по полю, содержащему фамилии.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.