栈的一般操作

#include <iostream>
using namespace std;

typedef int Elem;
struct Stack
{
    Elem *arr;
    int top;
    int bottom;
    int length;
};
/*
*   @creat      初始化栈
*   @push       压栈
*   @pop        出栈
*   @destory     销毁栈
*/
void creat(Stack *sta, int n);
void push(Stack *sta, Elem data);
Elem pop(Stack *sta);
void destory(Stack *sta);

void print(Stack *sta);

int main()
{
    Stack sta;
    creat(&sta, 9);
    int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    for(int i(0); i<9; i++)
    {
        push(&sta, arr[i]);
    }
    printf("原栈:\n");
    print(&sta);

    printf("--------------------\n");

    printf("990进栈:\n");
    push(&sta, 990);
    print(&sta);

    printf("出栈:\n");
    pop(&sta);
    print(&sta);

    return 0;
}

void creat(Stack *sta, int n)
{
    sta->arr = new Elem[n+5];
    sta->top = sta->bottom = 0;
    sta->length = 0;
}

void push(Stack *sta, Elem data)
{
    sta->arr[sta->top++] = data;
    sta->length++;
}

Elem pop(Stack *sta)
{
    if(sta->length)
    {
        sta->length--;
        return sta->arr[sta->top--];
    }
    return -1;
    
}

void destory(Stack *sta)
{
    sta->length = 0;
    delete[] sta->arr;
}

void print(Stack *sta)
{
    for(int i(sta->length-1); i>=0; i--)
    {
        if(i)
            cout << sta->arr[i] << ' ';
        else
            cout << sta->arr[i] << endl;
    }
}

运行结果