| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Delphi :: Delphi 7 начинающему :: Глава 8. Типы данных, определяемые программистом :: Добавление элемента в список
Добавление элемента в списокДобавление
элемента в список Добавление элемента
в список выполняется путем корректировки указателей. Для того чтобы добавить
элемент в упорядоченный список, нужно сначала найти элемент, после которого
требуется вставить новый. Затем следует скорректировать указатели. Указатель
нового элемента нужно установить на тот элемент, на который указывает элемент,
после которого добавляется новый. Указатель элемента, после которого добавляется
новый элемент, установить на этот новый элемент (рис. 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.
Trac + Subversion @ Ubuntu: Revisited.
Задача: Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.
Подробнее... |
Рубрика: Ubuntu
| Добавлено: 30.08.2008
[g]Vim в режиме Python: Рекомпиляция в Windows.
Редактор Vim наиболее известен среди разработчиков в системах Unix — конкурент emacs, что-то вроде консольного IDE — этот редактор при должной сноровке и настройке (мне кажется, сноровке несколько меньшей и настройке более очевидной чем в emacs, но у последнего также есть мощная мультифункциональность — выбор за программистом) способен убыстрить и упростить многие процессы на этапах разработки не в ущерб таким удобствам как, например, авто-дополнение и навигация по проекту.
Подробнее... |
Рубрика: Статьи
| Добавлено: 30.08.2008
Java + JSON. Пути к дружбе.
Спешу поделиться результатами небольшого исследования, оказавшегося необходимым для текущего проекта. Рассматривается возможность связки Java и JSON, её преимущества и недостатки. Я расскажу о практической части, о теории больше поведают нижеприведённые ссылки (англ.).
Подробнее... |
Рубрика: Технология JAVA
| Добавлено: 30.08.2008
Остальные статьи:
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения
Windows 7: под покровом тайны
Apache mod_ndb - MySQL кластер с доступом через HTTP и Ajax
Поиск уязвимостей в программах с помощью анализаторов кода
Как появилась библиотека VivaCore
Это сложно
ASP.NET и немного поисковой оптимизации
Protocol buffers: библиотека обмена данными для C++, Java, Python от Google |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|