Cài đặt Stack số nguyên bằng mảng một chiều trong C++


| Cài đặt Stack số nguyên bằng mảng một chiều trong C++



Khai báo Stack

struct Stack
{
    int Top;
    int Data[MAX];
};

Prototype

void init(Stack&);
bool IsEmpty(Stack);
bool IsFull(Stack);
void Push(Stack&, int);
int Peek(Stack);
int Pop(Stack&);
void Input(Stack&);
void Output(Stack);
void Menu();
void XuLyMenu(Stack&);

Main.cpp

#include <iostream>
using namespace std;
#define MAX 100
int main()
{
    int x;
    Stack s;
    init(s);
    Input(s);
    Output(s);
    Menu();
    while (true)
        XuLyMenu(s);
    system("pause");
    return 0;
}

Khởi tạo Stack

void init(Stack& s)
{
    s.Top = 0;
}

IsEmpty: Kiểm tra Stack rỗng hay không

int IsEmpty(Stack s)
{
    return (s.Top == 0);
}

IsFull: Kiểm tra Stack đầy hay không

int IsFull(Stack s)
{
    return (s.Top == MAX);
}

Push phần tử vào Stack

void Push(Stack& s, int x)
{
    if (!IsFull(s))
    {
        s.Data[s.Top] = x;
        s.Top++;
    }
    else cout << "Stack day.\n";
}

Pop: Lấy phần tử và xoá khỏi Stack

int Pop(Stack& s)
{
    if (!IsEmpty(s))
    {
        s.Top--;
        return s.Data[s.Top];
    }
    else cout << "Stack rong.\n";
}

Peek: Lấy phần tử nhưng không xoá khỏi Stack

int Peek(Stack s)
{
    return s.Data[s.Top - 1];
}

Hàm nhập

void Input(Stack& s)
{
    int n;
    int x;
    do
    {
        cout << "Nhap so phan tu cua Stack: ";
        cin >> n;
    } while (n > MAX || n < 1);
    for (int i = 0; i < n; i++)
    {
        cout << "Nhap phan tu thu " << i << ": ";
        cin >> x;
        Push(s, x);
    }
}

Hàm xuất

void Output(Stack s)
{
    if (IsEmpty(s))
        cout << "Stack rong.\n";
    else
    {
        cout << "Xuat Stack: ";
        for (int i = s.Top - 1; i >= 0; i--)
        {
            cout << s.Data[i] << " ";
        }
        cout << endl;
    }

}

Xuất danh sách Menu

void Menu()
{
    cout << "\n1. Kiem tra Stack rong hay khong?";
    cout << "\n2. Kiem tra Stack day hay khong?";
    cout << "\n3. Push phan tu vao Stack.";
    cout << "\n4. Pop phan tu tu Stack.";
    cout << "\n5. Xem phan tu o dau Stack.";
    cout << "\n6. Xuat Stack.";
    cout << "\n7. Thoat.";
    cout << endl;
}

Xử lý Menu với lựa chọn tương ứng

void XuLyMenu(Stack& s)
{
    int luachon;
    do
    {
        cout << "\nNhap lua chon: ";
        cin >> luachon;
        switch (luachon)
        {
        case 1:
        {
            if (IsEmpty(s))
                cout << "Stack rong.\n";
            else cout << "Stack khong rong.\n";
            break;
        }
        case 2:
        {
            if (IsFull(s))
                cout << "Stack day.\n";
            else cout << "Stack khong day.\n";
            break;
        }
        case 3:
        {
            int x;
            cout << "Nhap gia tri phan tu can push: ";
            cin >> x;
            Push(s, x);
            Output(s);
            break;
        }
        case 4:
        {
            cout << "Phan tu da pop: " << Pop(s) << endl;
            Output(s);
            break;
        }
        case 5:
        {
            cout << "Phan tu o dau Stack: " << Peek(s) << endl;
            break;
        }
        case 6:
        {
            Output(s);
            break;
        }
        case 7:
            exit(1);
            break;
        }
    } while (luachon < 1 || luachon > 6);
}

Nhận xét