STL stack 常见用法详解

《算法笔记》学习笔记

stack 常见用法详解

stack翻译为栈,是STL中实现的一个后进先出的容器。

1.stack的定义

//要使用stack,应先添加头文件#include <stack>, 并在头文件下面加上"using namespace std"
//定义
stack< typename > name;

2. stack容器内元素的访问

//由于栈(stack)本书就是一种后进先出的数据结构,在STL的stack中只能通过top()来访问栈顶元素
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    for(int i = 1; i <= 5; i++) {
        st.push(i); //push(i)用以把i压入栈,故此处依次入栈 1 2 3 4 5
    }
    printf("%d\n", st.top()); //top取栈顶元素
    return 0;
}

3. stack常用函数实例解析

(1) push()

//push(x)将x入栈,时间复杂度为O(1)

(2) top()

//top()获得栈顶元素,时间复杂度为O(1)

(3) pop()

//pop()用以弹出栈顶元素,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    for(int i = 1; i <= 5; i++) {
        st.push(i); //将 1 2 3 4 5 依次入栈
    }
    for(int i = 1; i <= 3; i++) {
        st.pop();   //连续三次将栈顶元素出栈,即将5 4 3 依次出栈
    }
    printf("%d\n", st.top());
    return 0;
}

(4) empty()

//empty()可以检测stack内是否为空,放回true为空,返回false为非空,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    if(st.empty() == true) { //一开始栈内没有元素,因此栈空
        printf("Empty\n");
    } else {
        printf("Not Empty\n");
    }
    st.push(1);
    if(st.empty() == true) { //入栈"1"后,栈非空
        printf("Empty");
    } else {
        printf("Not Empty\n");
    }
    return 0;
}

(5) size()

//size()返回stack内元素的个数,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    for(int i = 1; i <= 5; i++) {
        st.push(i); //push(i)用以将i压入栈
    }
    printf("%d\n", st.size());  //栈内有5个元素
    return 0;
}

3. stack的常见用途

  • 模拟实现一些递归,防止程序堆栈内存的现在而导致程序运行出错
posted @ 2019-09-28 17:01  哨音  阅读(2302)  评论(0编辑  收藏  举报