Стек
Елементи на формі
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
ListBox1: TListBox;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Дані
constempty = 'The stack is empty!';
full = 'The stack is full. Max elements: ';
n_max = 7;
veselka : array [1..n_max] of string = ('red','orange','yellow','green','blue','indigo','violet');
type
stack_shape = ^stack_veselka;
stack_veselka= record
next : stack_shape;
list : string;
end;
var
Form1: TForm1;
p_head : stack_shape;
p_new : stack_shape;
n : 1..n_max;
Процедури
Процедура стартової формиprocedure TForm1.FormCreate(Sender: TObject);
begin
n := 0;
p_head := nil;
Shape1.Visible := False;
Shape2.Visible := False;
Shape3.Visible := False;
Shape4.Visible := False;
Shape5.Visible := False;
Shape6.Visible := False;
Shape7.Visible := False;
end;
Процедура додавання елементів в стек
procedure TForm1.Button1Click(Sender: TObject);
begin
if n < n_max then begin
Inc(n);
Label2.Caption := IntToStr(n);
New(p_new);
p_new^.next := p_head; // новий вказує на попередню верхівку стека
p_new^.list := veselka[n];
p_head := p_new; // вершиною стека стає новий елемент
ListBox1.Items.Add(IntTOStr(n) + '. ' + p_new^.list);
case n of
1 : begin Shape7.Visible := True; end;
2 : begin Shape6.Visible := True; end;
3 : begin Shape5.Visible := True; end;
4 : begin Shape4.Visible := True; end;
5 : begin Shape3.Visible := True; end;
6 : begin Shape2.Visible := True; end;
7 : begin Shape1.Visible := True; end;
end;
end
else ShowMessage(full + IntToStr(n_max));
end;
Процедура вилучення елементів зі стека
procedure TForm1.Button2Click(Sender: TObject);
begin
case n of
1 : begin Shape7.Visible := True; end;
2 : begin Shape6.Visible := True; end;
3 : begin Shape5.Visible := True; end;
4 : begin Shape4.Visible := True; end;
5 : begin Shape3.Visible := True; end;
6 : begin Shape2.Visible := True; end;
7 : begin Shape1.Visible := True; end;
end;
if p_head <> nil then begin
Dec(n);
p_new := p_head;
p_head := p_head^.next;
end
else ShowMessage(empty);
Label2.Caption := IntToStr(n);
end;
Інформація з сайту https://goo.gl/jcAmLy
Немає коментарів:
Дописати коментар