BCSTACK spoj PTIT – Cấu trúc dữ liệu ngăn xếp

Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCSTACK/

1. Đề bài Stack BCSTACK spoj

Bài này sẽ luyện cho bạn các thao tác cài đặt cấu trúc dữ liệu ngăn xếp (stack). Nếu đã cài đặt thành công, hãy tìm hiểu cách sử dụng container stack trong STL và cài đặt nó.

Thao tác:

–          1. ‘init’ : Khởi tạo stack rỗng.

–          2. ‘push x’: Thêm phần tử x vào stack. (x là số nguyên dương không quá 10 mũ 9)

–          3. ‘pop’: Nếu stack không rỗng lấy ra phần tử ở đỉnh stack.

–          4. ‘top’: Trả về phần tử ở đỉnh stack. Nếu stack rỗng, trả về -1.

–          5. ‘size:’ Trả về kích thước stack (số phần tử hiện tại của stack).

–          6. ‘empty’: Kiểm tra stack rỗng hay không, nếu rỗng trả về 1, ngược lại là 0.

–          7. ‘end’: Kết thúc chương trình.

Dữ liệu:

Gồm nhiều dòng mô tả các thao tác như trên (số phần tử của stack luôn không quá 1000).

Kết quả:

Khi gặp các thao tác 4,5,6 các bạn in ra trên 1 dòng tương ứng với câu trả lời.

Ví dụ:

INPUTOUTPUT
initempty

push 2

empty

top

push 1

size

top

pop

top

init

push 1

top

init

top

end

10

2

2

1

2

1

-1

2. Code tham khảo BCSTACK Cấu trúc dữ liệu ngăn xếp

Bài này khá cơ bản, các bạn tham khảo code:

const   fi='';
        nmax=1000;
type    data=integer;
var
        f:text;
        A:array[0..nmax] of longint;
        n:data;
        s:string;

procedure init;
begin
        n:=0;
end;

procedure pop;
begin
        if n=0 then exit;
        dec(n);
end;

procedure top;
begin
        writeln(a[n]);
end;

procedure empty;
begin
        if n=0 then writeln(1)
        else
                writeln(0);
end;

procedure push;
var     x,r:longint;
begin
        delete(s,1,5);
        val(s,x,r);
        inc(n);
        a[n]:=x;
end;

procedure xuli;
begin
        a[0]:=-1;
        repeat
                readln(f,s);
                case s of
                'init': init;
                'end': exit;
                'pop': pop;
                'top': top;
                'size': writeln(n);
                'empty': empty;
                else
                        push;
                end;
        until 1=2;
end;

begin
        assign(f,fi); reset(f);
        xuli;
        close(f);
end.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *