понеділок, 10 вересня 2018 р.

Структури даних

Стек


Елементи на формі

    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    ListBox1: TListBox;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Shape5: TShape;
    Shape6: TShape;
    Shape7: TShape;

Дані

const
    empty = '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

Немає коментарів:

Дописати коментар