Stack cài bằng mảng

 avatar
user_1746670
c_cpp
25 days ago
1.6 kB
2
Indexable
Never
// Cài đặt stack sử dụng mảng 

#include <bits/stdc++.h>
using namespace std;

#define MAX 1005

struct Stack {
    int n;
    int a[MAX];

    Stack() : n(0) {}
};

// full
bool Full(Stack st) {
    return st.n == (MAX - 1);
}

// empty
bool Empty(Stack st) {
    return st.n == 0;
}

// push
void pushStack(Stack &st, int x) {
    if (Full(st)) {
        cout << "Khong push duoc" << endl;
        return;
    } else {
        st.n++;
        st.a[st.n - 1] = x;
    }
}

// pop
void popStack(Stack &st) {
    if (Empty(st)) {
        cout << "Khong pop duoc" << endl;
        return;
    } else {
        st.n--;
        st.a[st.n + 1] = 0;
    }
}

// top
bool topStack(Stack st, int& x) {
    if (Empty(st)) {
        cout << "Stack rong" << endl;
        return false;
    } else {
        x = st.a[st.n - 1];
        return true;
    }
}

// print
void printStack(Stack st) {
    while (!Empty(st)) {
        int x;
        if (topStack(st, x)) {
            cout << x << " ";
        }

        popStack(st);
    }
    cout << endl;
}

int main() {
    Stack st;

    pushStack(st, 4);
    pushStack(st, 2);
    pushStack(st, 3);
    pushStack(st, 7);
    pushStack(st, 5);
    pushStack(st, 9);

    printStack(st);

    popStack(st);
    popStack(st);
    popStack(st);
    popStack(st);

    printStack(st);

    popStack(st);
    popStack(st);

    int x;
    if (topStack(st, x)) {
        cout << "top = " << x << endl;
    } 

    return 0;
}
Leave a Comment