STL之栈的应用

Stack容器:

1)容器适配器,遵循先进后出(FILO)数据结构。

2)头文件:#include <stack>

3)常用函数:
stack<int>s;

s.empty()//如果栈为空返回true,否则返回false  
s.size()//返回栈中元素的个数  
s.pop()//删除栈顶元素但不返回其值  
s.top()//返回栈顶的元素,但不删除该元素  
s.push(X)//在栈顶压入新元素 ,参数X为要压入的元素

例子:

#include<stack>
#include<iostream>
using namespace std;

int main() {
    stack<int>s;
    int a[8] = { 3,5,17,9,30,15,2,4 };

    for (int i = 0; i < 8; i++) {
        s.push(a[i]);//入栈
    }

    cout << s.size() << endl;//栈中所有元素个数

    cout << s.top() << endl;//栈顶元素

    //依次输出栈中所有元素
    while (!s.empty()) {
        cout << s.top() << " ";
        s.pop();
    }
    cout << endl;

    //没有自动清空的栈的函数,应这样实现
    while (!s.empty()) {
        s.pop();
    }
    return 0;
}

 数据结构实现:

#include<iostream>
using namespace std;

const int MAXN = 100;//栈的最大长度

//定义栈
struct Stack {
    int *stack;
    int top;
};

//初始化栈
void InitStack(Stack& s) {
    s.stack = new int[MAXN];
    s.top = -1;
}

//入栈
void Push(Stack &s, int item) {
    s.top++;
    s.stack[s.top] = item;
}

//出栈
int Pop(Stack& s) {
    s.top--;
    return s.stack[s.top + 1];
}

//读取栈定元素
int Peek(Stack s) {
    return s.stack[s.top];
}

//清空栈
void ClearStack(Stack& s) {
    if (s.stack) {
        delete[]s.stack;
        s.stack = 0;
    }
    s.top = -1;
}

//判断栈是否为空
bool EmptyStack(Stack s) {
    return s.top == -1;
}

int main() {
    Stack s;
    InitStack(s);
    int a[8] = { 3,5,17,9,30,15,2,4 };
    for (int i = 0; i < 8; i++) {
        Push(s, a[i]);
    }
    cout << Peek(s) << endl;
    //注意输出采用如下方式
    while (!EmptyStack(s)) {
        cout << Pop(s) << " ";
    }
    ClearStack(s);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Gzu_zb/p/10653589.html
今日推荐