1 .Начальное состояние Рисунок 4.2
Рисунок 4.2 – Начальное состояние
2. Пузырьковая сортировка начинается с конца
Для этого вначале сравниваем указатель на последний элемент(cur1^.Remuneration_Amount) с предпоследним(cur^.Remuneration_Amount),если предпоследний элемент больше последнего(см. Рисунок 4.3),то они меняются местами:
if MainForm.cur1^.Remuneration_Amount> cur^.Remuneration_Amount then
begin
S:=MainForm.cur1.Remuneration_Amount;
MainForm.cur1^.Remuneration_Amount:= cur^.Remuneration_Amount;
cur^.Remuneration_Amount:=S;
spt:=MainForm.cur1^.S;
MainForm.cur1^.S:=cur^.S;
cur^.S:=spt;
end;
e nd;
Рисунок 4.3 – Сравнение последнего с предпоследним
Хоть в нашем случае они оказывают равными,но все равно значения меняются местами Рисунок 4.4
Р исунок 4.4 – Идет сортивка-элементы меняются мстами
3 .
Рисунок 4.5 – Идет сортировка-Шаг 3
4 .
Рисунок 4.6 – Идет сортировка-элементы меняются местами
5 . Последующие значения стоят на своих местах,только нам осталось поменять местаи последний с предпоследним,так как предпоследний оказывается больше последнего Рисунок 4.7
Рисунок 4.7 – Завершение сортировки по возрастанию
Теперь по-шагово рассмотрим сортировка по убыванию,она идетнично сортировке по возрастанию,за исключением что самый «тяжелый» элемент будет стоять вначале,а самый «легкий» в конце.
1.Начальное состояние Рисунок 4.2
2. Пузырьковая сортировка начинается с конца
Для этого вначале сравниваем указатель на последний элемент(cur1^.Remuneration_Amount) с предпоследним(cur^.Remuneration_Amount),если предпоследний элемент меньше последнего(см. Рисунок 4.8),то они меняются местами:
if MainForm.cur1^.Remuneration_Amount> cur^.Remuneration_Amount then
begin
S:=MainForm.cur1.Remuneration_Amount;
MainForm.cur1^.Remuneration_Amount:= cur^.Remuneration_Amount;
cur^.Remuneration_Amount:=S;
spt:=MainForm.cur1^.S;
MainForm.cur1^.S:=cur^.S;
cur^.S:=spt;
end;
e nd;
Рисунок 4.8 – Идет сортировка – элементы меняются местами
3 .
Рисунок 4.9 – Идет сортировка – элементы меняются местами
4 .
Р исунок 4.10 - Идет сортировка – элементы меняются местами
5.
Р исунок 4.11 - Идет сортировка – элементы меняются местами
6.Конечное состояние
Рисунок 4.12 – Конечное состояние
Добавление в список.
procedure Insert;
begin
MainForm.Cur1:=MainForm.first1;
count:=0;
while MainForm.cur1<>NIL do
begin
MainForm.cur2:=MainForm.cur1^.S;
if (StrToInt(FileForm.Edit1.Text)=MainForm.cur1^.Remuneration_Amount) then
begin
count:=1;
while MainForm.cur2^.Next<>NIL do
begin
MainForm.cur2:=MainForm.cur2^.Next;
end;
New(MainForm.cur2^.Next);
MainForm.cur2:=MainForm.cur2^.Next;
MainForm.cur2^.Surname:=FileForm.Edit2.Text;
MainForm.cur2^.Name:=FileForm.Edit3.Text;
MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;
MainForm.cur2^.Code:=FileForm.Edit6.Text;
MainForm.cur2^.City:=FileForm.Edit5.Text;
MainForm.cur2^.Sing_of_termination:=0;
MainForm.cur2^.Next:=NIL;
end;
MainForm.cur1:=MainForm.cur1^.L;
end;
if count=0 then
begin
MainForm.cur1:=MainForm.first1;
while MainForm.cur1^.L<>NIL do
begin
MainForm.cur1:=MainForm.cur1^.L;
end;
New(MainForm.cur1^.L);
MainForm.cur1:=MainForm.cur1^.L;
MainForm.cur1^.Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);
MainForm.cur1^.L:=NIL;
New(MainForm.cur2);
MainForm.cur1^.S:=MainForm.cur2;
MainForm.cur2^.Surname:=FileForm.Edit2.Text;
MainForm.cur2^.Name:=FileForm.Edit3.Text;
MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;
MainForm.cur2^.City:=FileForm.Edit5.Text;
MainForm.cur2^.Code:=FileForm.Edit6.Text;
MainForm.cur2^.Sing_of_termination:=0;
MainForm.cur2^.Next:=NIL;
end;
end;
1 .Так как у меня по умолчанию сортировка по возрастанию,то я буду рассматривать добавление при данной сортировки. Начальное состояние структуры показано на Рисунок 4.13.
Рисунок 4.13- Начальное состояние
2. Рассмотри два случая когда значение Remuneration_Amount есть и когда ещё такого значения Remuneration_Amount нет. Рассматриваем когда Remuneration_Amount:=400, добавление будет на первом уровне Рисунок 4.14
Р исунок 4.14 – Добавили элемента когда Remuneration_Amount:=400
3.А сейчас рассмотрим когда значение Remuneration_Amount:=250 есть.
Е сли if (StrToInt(FileForm.Edit1.Text)=MainForm.cur1^.Remuneration_Amount) совпадают, то добавляем на второй уровень Рисунок 4.15
Рисунок 4.15 –Добавление элемента когда Remuneration_Amount:=250
Удаление.
procedure Delete;
var
Remuneration_Amount : Word; // Сумма вознаграждения
Surname : TString; // Фамилия
Name : TString; // Имя
Patronymic_Name : TString; // Отчество
Code : TString; // Код ХД
City : TString; // Город в котором находится отделнение
CountCur : Boolean; // Проверка существует ли такая запись
begin
Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);
Surname:=FileForm.Edit2.Text;
Name:=FileForm.Edit3.Text;
Patronymic_Name:=FileForm.Edit4.Text;
City:=FileForm.Edit5.Text;
Code:=FileForm.Edit6.Text;
CountCur:=False;
MainForm.Cur1:=MainForm.first1;
while MainForm.cur1<>NIL do
begin
if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) then
begin
MainForm.cur2:=MainForm.cur1^.S;
while MainForm.cur2<>NIL do
begin
if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) and
(Surname=MainForm.cur2^.Surname) and
(Name=MainForm.cur2^.Name) and
(Patronymic_Name=MainForm.cur2^.Patronymic_Name) and
(Code=MainForm.cur2^.Code) and
(City=MainForm.cur2^.City) then
begin
CountCur:=True;
{Логическое удаление записи из структуры}
MainForm.cur2^.Sing_of_termination:=1;
end;
MainForm.cur2:=MainForm.cur2^.Next;
end;
end;
MainForm.cur1:=MainForm.cur1^.L;
end;
if CountCur then
MessageBox(0,'Запись удалена','Собщение',MB_OK)
else
MessageBox(0,'Данной записи не существует в структуре','Удаление не возможно',MB_OK);
end;
end.
Мы можем удалять по различным параметрам(по сумме вознаграждения, по фамилии, по имени, по отчеству, по коду ХД, по городу в котором находится отделение). Удалим запись с Remuneration_Amount:=900 Рисунок 4.16
Р исунок 4.16 – Нашли элемент с Remuneration_Amount:=900
2 .Удаляем его, тогда у предпоследнего элемента станет cur1=NIl Рисунок 4.17
Рисунок 4.17 – Конечное состояние