数据结构-栈 学习笔记

本文介绍了栈作为一种特殊线性表的数据结构,强调其后进先出(LIFO)的工作原理,并通过数组模拟和标准库STL栈的使用方法进行了详细阐述,包括栈的基本操作如入栈、出栈、取栈顶等以及应用场景如括号匹配和表达式求值。
摘要由CSDN通过智能技术生成
栈-stack
一种只支持在一端插入/删除元素的线性表
操作
定义栈:stack<类型> 名称
入栈:push
出栈:pop 需保证栈不空
取栈顶:top
判断栈是否为空:empty
求栈的大小/长度:size
数组模拟栈
一个数组:保存元素
一个指针:指向栈顶元素
应用
括号匹配类问题
表达式求值类问题
递归/深搜

情景引入

小 A 家住在一个小巷子里,这是一条死胡同,每天都有车停在死胡同里,小 A 发现,先停进去的车必须要等到新进来的车全部开走(即车在从外到内第一个)时,才能从胡同内出来。这个胡同便是常见的数据结构——栈

概念与示例

栈是一种操作受限的线性表,可以看作是一个特殊的数组,数组只能在末尾增加元素或删除元素

栈的修改与访问是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表

我们可以用一个普通数组模拟栈

int n,st[N],l,i;
cin>>n;
for(i=1;i<=n;i++){
    int a;
    cin>>a;
    st[l++]=a;//压入元素
}
if(l!=0)l--;//弹出栈顶元素
while(l){
    cout<<st[l]<<" ";//输出栈顶元素
    l--;//弹出栈顶元素
}

标准的栈写法如下所示:

stack<int> st1,st2;//int表示栈内元素的数据类型
st1.push(1);//向栈顶压入元素1
st1.push(2)//向栈顶压入元素2
st2=st1;//将st1赋值给st2
st1.empty();//判断栈是否为空,是则返回true,不空则返回false
st1.pop();//弹出栈顶元素
cout<<st1.top();//输出栈顶元素
//此时应该输出1
属性和操作数组模拟栈STL栈
头文件#include
定义int st[100], top = 0; // 栈大小为100stack stk;
栈的大小int size = top - 0;int size = stk.size();
栈为空top == 0 // 表示栈为空stk.empty() == true // 表示栈为空
取栈顶st[top] // 前置条件:栈不为空 top > 0stk.top() // 前置条件:栈不为空 top > 0
进栈st[++top] = t; // 将 t 入栈stk.push(t); // 将 t 入栈
出栈top–; // 前置条件:栈不为空 top > 0stk.pop(); // 前置条件:栈不为空 !stk.emtpy()
清空栈top = 0;stk = stack (); // 或 将一个空栈复制给 stk
优点运行速度快,使用灵活,可以遍历栈元素定义方便,不用关心栈的大小限制
缺点书写稍微麻烦运行速度比手写栈慢一些,操作完全受限
  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值