Реферат: Линейные списки. Стек. Дек. Очередь
Inc(StackPos);
s := Edit4.Text;
for i := 1 to StackPos - 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit4.Text := s;
end
else
begin
ShowMessage('Стек пуст');
Edit4.Text := '';
Image4.Hide;
Button14.Enabled := False;
Button15.Enabled := False;
Button16.Enabled := False;
StatusBar1.Panels[1].Text := 'Стек пуст';
end;
Image4.Left := Round(StackPos * 7);
end;
procedure TForm1.Button20Click(Sender: TObject);
var
i: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetDeckBegin(DeckBegin);
if DeckBegin <> nil then
begin
while Edit5.Text[DeckBeginPos] <> ' ' do Inc(DeckBeginPos);
Inc(DeckBeginPos);
s := Edit5.Text;
for i := 1 to DeckBeginPos - 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit5.Text := s;
end;
if (DeckBegin = nil) and (DeckBegin = DeckEnd) then
begin
ShowMessage('Дек пуст');
Edit5.Text := '';
Image5.Hide;
Image6.Hide;
Button18.Enabled := False;
Button19.Enabled := False;
Button20.Enabled := False;
StatusBar1.Panels[1].Text := 'Дек пуст';
end;
Image5.Left := Round(DeckBeginPos * 7);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Windows.SetFocus(Button21.Handle);
end;
procedure TForm1.Button19Click(Sender: TObject);
var
i, a: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetDeckEnd(DeckEnd);
if DeckEnd <> nil then
begin
while Edit5.Text[DeckEndPos] <> ' ' do Dec(DeckEndPos);
Dec(DeckEndPos);
s := Edit5.Text;
for i := DeckEndPosition downto DeckEndPos + 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit5.Text := s;
//удаляем все пробелы конце строки
s := '';
i := Length(Edit5.Text) - 1;
while Edit5.Text[i] = ' ' do Dec(i);
for a := 1 to i do s := s + Edit5.Text[a];
Edit5.Text := s;
end;
if (DeckEnd = nil) and (DeckBegin = DeckEnd) then
begin
ShowMessage('Дек пуст');
Edit5.Text := '';
Image5.Hide;
Image6.Hide;
Button19.Enabled := False;
Button20.Enabled := False;
StatusBar1.Panels[1].Text := 'Дек пуст';
end;
Image6.Left := Round(DeckEndPos * 7 - 9);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DeleteFromList(ListPos);
DoNewEditList;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
DeleteFromListTwo(ListTwoPos);
DoNewEditListTwo;
end;
procedure TForm1.Button10Click(Sender: TObject);
var
i, a: Integer;
s1, s2: string;
begin
GetQueue(QueueBegin);
if QueueBegin <> nil then
begin
i := QueuePos;
while (Edit3.Text[i] <> ' ') and (i <= Length(Edit3.Text)) do Inc(i);
Inc(i);
s1 := '';
s2 := '';
for a := 1 to QueuePos - 1 do s1 := s1 + Edit3.Text[a];
for a := i to Length(Edit3.Text) do s2 := s2 + Edit3.Text[a];
Edit3.Text := s1 + s2;
end;
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.Button14Click(Sender: TObject);
var
i, a: Integer;
s1, s2: string;
begin
GetStack(Stack);
i := StackPos;
while (Edit4.Text[i] <> ' ') and (i <= Length(Edit4.Text)) do Inc(i);
Inc(i);
s1 := '';
s2 := '';
for a := 1 to StackPos - 1 do s1 := s1 + Edit4.Text[a];
for a := i to Length(Edit4.Text) do s2 := s2 + Edit4.Text[a];
Edit4.Text := s1 + s2;
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
Form6.Show;
end;
procedure TForm1.Button17Click(Sender: TObject);
begin
Form7.Show;
end;
procedure TForm1.Button18Click(Sender: TObject);
begin
Form8.Show;
end;
procedure TForm1.Button26Click(Sender: TObject);
begin
StatusBar1.Panels[0].Text := 'Нельзя !!!';
Memo1.Lines.Add('В цикл. списке нельзя перемещаться назад, т.к. по сути цикл. список это однонаправ. список и следовательно связь существует только в одну сторону;');
end;
procedure TForm1.Button25Click(Sender: TObject);
var
qRoundList: List;
i, j: Integer;
Count: Integer;
begin
StatusBar1.Panels[0].Text := '';
qRoundList := RoundList^.Next;
// Подсчет кол-ва елементов в списке
Count := 1;
while qRoundList <> RoundList do
begin
Inc(Count);
qRoundList := qRoundList^.Next;
end;
qRoundList := RoundList;
i := 0;
while i <> RoundListPos do
begin
qRoundList := qRoundList^.Next;
Inc(i);
end;
if qRoundList <> nil then
begin
if qRoundList^.Next <> nil then Inc(RoundListPos);
if RoundListPos > Count - 1 then RoundListPos := 0;
i := 0;
j := 0;
while i < RoundListPos do
begin
Inc(j);
if Edit7.Text[j] = ' ' then Inc(i);
end;
if RoundListPos = 0 then j := -1;
Image7.Left := Round(9 + (j + 1) * 7.5);
end;
end;
procedure TForm1.Button23Click(Sender: TObject);
begin
Form9.Show;
end;
procedure TForm1.Button24Click(Sender: TObject);
begin
if RoundList <> nil then
begin
DeleteFromRoundList(RoundListPos);
if RoundList <> nil then DoNewEditRoundList;
end
else
begin
Edit7.Text := '';
ShowMessage('Циклический список пуст');
Button24.Enabled := False;
Button25.Enabled := False;
Button26.Enabled := False;
Image7.Hide;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
AboutBox.Visible := True;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form10.Visible := True;
end;
procedure TForm1.Button27Click(Sender: TObject);
begin
Form11.Show;
end;
procedure TForm1.Button30Click(Sender: TObject);
begin
Form12.Show;
end;
procedure TForm1.Button29Click(Sender: TObject);
begin
Form13.Show;
end;
procedure TForm1.Button31Click(Sender: TObject);
begin
Form14.Show;
end;
procedure TForm1.Button32Click(Sender: TObject);
begin
Form15.Show;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form1.Hide;
Form16.Show;
N8.Enabled := False;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №1.');
Memo1.Lines.Add(' "Списки"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для получения информации о списках.');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. На листе формата А4, опишите ход проделанной работы.');
Memo1.Lines.Add(' Ответьте на поставленные вопросы.');
Memo1.Lines.Add(' 1) Что такое линейный список?');
Memo1.Lines.Add(' 2) Какие операции можно выполнить с линейным списком?');
Memo1.Lines.Add(' 3) Какие существую еще списки?');
Memo1.Lines.Add(' 4) Что представляет из себя связанное распределение?');
Memo1.Lines.Add(' 5) Чем отличается связанное распределение от последовательного?');
Memo1.Lines.Add(' 6) Что такое динамические переменные? Функции new и nil.');
end;
procedure TForm1.Button33Click(Sender: TObject);
begin
Form17.Show;
end;
procedure TForm1.N21Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №2.');
Memo1.Lines.Add(' "Однонаправленный и двунаправленный список"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для однонаправленного и ');
Memo1.Lines.Add(' двунаправленного списка.');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');
Memo1.Lines.Add(' Кнопки "<< и >>" служат для перемещения курсора по списку.');
Memo1.Lines.Add(' а) Переместитесь влево до 3, 5 и последнего элемента;');
Memo1.Lines.Add(' б) Переместитесь вправо до первого элемента (см. коментарии);');
Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в список.');
Memo1.Lines.Add(' а) Добавьте после 3, 5, 7 элемента цифру 33 в обоих списках;');
Memo1.Lines.Add(' б) Добавте 1-м и 3-м элементом цифру 55 в двунаправленном списке;');
Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из списка.');
Memo1.Lines.Add(' а) Удалите 3, 5, 7 элементы в однонаправленном списке;');
Memo1.Lines.Add(' б) Удалите последний, 1 и 3 элементы в двунаправленном;');
Memo1.Lines.Add('');
Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');
Memo1.Lines.Add(' Ответьте на поставленные вопросы:');
Memo1.Lines.Add(' 1) Обратите внимание как перемещается курсор?');
Memo1.Lines.Add(' 2) Чем отличается однонаправленный и двунаправленный списки?');
Memo1.Lines.Add(' 3) Можно ли добавить элемент в любое место списка?');
Memo1.Lines.Add(' 4) Можно ли удалить любой элемент из списка?');
end;
procedure TForm1.N31Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №3.');
Memo1.Lines.Add(' "Циклический список"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для циклического списка?');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');
Memo1.Lines.Add(' Кнопки "<< и >>" служат для перемещения курсора по списку.');
Memo1.Lines.Add(' а) Переместитесь вправо до 3, 5, последнего, первого элемента;');
Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');
Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в список.');
Memo1.Lines.Add(' а) Добавьте 3, 5, 1-м элементами число 44;');
Memo1.Lines.Add(' б) Добавьте после 2, 4, 1-го элемента число 0;');
Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из списка.');
Memo1.Lines.Add(' Удалите 3, 5, 1, 4 элементы;');
Memo1.Lines.Add('');
Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');
Memo1.Lines.Add(' Ответьте на поставленные вопросы:');
Memo1.Lines.Add(' 1) Обратите внимание как перемещается курсор?');
Memo1.Lines.Add(' 2) Какую ссылку имеет последний элемент циклического списка?');
Memo1.Lines.Add(' 3) Что называется головой и хвостом списка?');
end;
procedure TForm1.N41Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №4.');
Memo1.Lines.Add(' "Очередь"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для очереди.');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');
Memo1.Lines.Add(' Кнопки "<< и >>" служат для перемещения курсора по очереди.');
Memo1.Lines.Add(' а) Переместитесь вправо до 3 элемента;');
Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');
Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в очередь.');
Memo1.Lines.Add(' а) Добавьте 1, 4, 5-м элементами число 99;');
Memo1.Lines.Add(' б) Добавьте последним число 999;');
Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из очереди.');
Memo1.Lines.Add(' Удалите 1, 2, 3 элементы;');
Memo1.Lines.Add('');
Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');
Memo1.Lines.Add(' Ответьте на поставленные вопросы:');
Memo1.Lines.Add(' 1) Как удаляется и добавляется элементы в очереди?');
Memo1.Lines.Add(' 2) В чем различие и сходство очереди и однонаправленного списка?');
Memo1.Lines.Add(' 3) Что называется головой и хвостом очереди?');
Memo1.Lines.Add(' 4) Как располагаются элементы в очереди?');
end;
procedure TForm1.N51Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №5.');
Memo1.Lines.Add(' "Стек"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для стека.');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');
Memo1.Lines.Add(' Кнопки "<< и >>" служат для перемещения курсора в стеке.');
Memo1.Lines.Add(' а) Переместитесь вправо до 4 элемента;');
Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');
Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в стек.');
Memo1.Lines.Add(' Добавьте 1, 3, 5 элементами число 22;');
Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из стека.');
Memo1.Lines.Add(' Удалите 1, 3, 5, последний элементы;');
Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');
Memo1.Lines.Add(' Ответьте на поставленные вопросы:');
Memo1.Lines.Add(' 1) Как удаляется и добавляется элементы в стек?');
Memo1.Lines.Add(' 2) Приведи примеры стека на практике?');
end;
procedure TForm1.N61Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(' Лабораторная работа №6.');
Memo1.Lines.Add(' "Дек"');
Memo1.Lines.Add('______________________________________________________________');
Memo1.Lines.Add('1. Нажмите кнопку "Теория" для дека.');
Memo1.Lines.Add(' Внимательно изучите теоретический материал.');
Memo1.Lines.Add('');
Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');