Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Implementation

Читайте также:
  1. Implementation
  2. Implementation
  3. Implementation
  4. Implementation
  5. implementation
  6. 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 (curr<>NIL),

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

выполнения, т. к. 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+' '+curr^.l_name+#13;

curr:=curr^.next;

end;

if n <> 0 then ShowMessage('Список: '+#13+st)

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

end;

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

procedure TForm1.FormActivate(Sender: TObject);

Begin

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

end;

End.

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

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

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




Дата добавления: 2015-02-16; просмотров: 103 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав