数据结构历年考研真题对应知识点(栈)

目录

3.1栈

3.1.1栈的基本概念

【栈的特点(2017)】

【入栈序列和出栈序列之间的关系(2022)】

【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】

3.1.2栈的顺序存储结构

【出/入栈操作的模拟(2009)】


3.1栈

3.1.1栈的基本概念

【栈的特点(2017)】

栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。

栈顶 (Top)。线性表允许进行插入删除的那一端
栈底 (Bottom)。固定的,不允许进行插入和删除的另一端。
空栈。不含任何元素的空表。

每接触一种新的数据结构,都应从其逻辑结构、存储结构和运算三个方面着手。

【入栈序列和出栈序列之间的关系(2022)】

【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】

假设某个栈S=(a1, a2, a3, a4,a5),如图 3.1 所示,则 a1 为栈底元素,a5为栈顶元素。

栈只能在栈顶进行插入和删除操作,进栈次序依次为a1,a2,a3,a4,a5,而出栈次序为 a5,a4,a3,a2,a1。

由此可见,栈的操作特性可以明显地概括为后进先出(Last In First Out,LIFO)。

3.1.2栈的顺序存储结构

【出/入栈操作的模拟(2009)】

栈操作的示意图如图 3.2 所示,图 3.2(a)是空栈,图 3.2(c)是A、B、C、D、E共5个元素依次入栈后的结果,图 3.2(d)是在图 3.2(c)之后E、D、C的相继出栈,此时栈中还有2个元素,或许最近出栈的元素 C、D、E仍在原先的单元存储着,但 top 指针已经指向了新的栈顶,元素 C、D、E已不在栈中,读者应通过该示意图深刻理解栈顶指针的作用。

下面是顺序栈上常用的基本操作实现:

(1)初始化

cpp 复制代码
void InitStack(SqStack &S){
    S.top=-1;                //初始化栈顶指针
}

(2)判栈空

cpp 复制代码
bool StackEmpty(SqStack S){
    if(S.top==-1)            //栈空
        return true;            
    else                     //不空
        return false;
}

(3)进栈

cpp 复制代码
bool Push(SqStack &S,ElemType x){
    if(S.top==MaxSize-1)            //栈满,报错
        return false;
    S.data[++S.top]=x;              //指针先加1,再入栈
    return true;
}

(4)出栈

cpp 复制代码
bool Pop(SqStack &S,ElemType &x){
    if(S.top==-1)                    //栈空,报错
        return false;
    x=S.data[S.top--];               //先出栈,指针再减1
    return true;
}

(5)读取栈顶元素

cpp 复制代码
bool GetTop(SqStack S,ElemType &x){
    if(S.top==-1) //栈空,报错
        return false;
    x=S.data[S.top];//x记录栈顶元素
    return true;
}

仅为读取栈顶元素,并没有出栈操作,因此原栈顶元素依然保留在栈中。

注意:

这里的 top 指的是栈顶元素。于是,进栈操作为 S.data[++S.top]=x,出栈操作为x=S.data[S.top--]。若栈顶指针初始化为S.top=0,即 top 指向栈顶元素的下一位置,则入栈操作变为S.data[S.top++]=x;出栈操作变为x=S.data[--S.top]。相应的栈空栈满条件也会发生变化。

相关推荐
ゞ 正在缓冲99%…6 分钟前
leetcode152.乘积最大子数组
数据结构·算法·leetcode
闯闯爱编程1 小时前
数组与特殊压缩矩阵
数据结构·算法·矩阵
laimaxgg2 小时前
数据结构B树的实现
开发语言·数据结构·c++·b树·算法
灋✘逞_兇4 小时前
链表的操作-反转链表
数据结构·链表
双叶8368 小时前
(C语言)虚数运算(结构体教程)(指针解法)(C语言教程)
c语言·开发语言·数据结构·c++·算法·microsoft
快来卷java10 小时前
MySQL篇(一):慢查询定位及索引、B树相关知识详解
java·数据结构·b树·mysql·adb
想睡hhh11 小时前
c语言数据结构——八大排序算法实现
c语言·数据结构·排序算法
月亮被咬碎成星星13 小时前
LeetCode[15]三数之和
数据结构·算法·leetcode
JCBP_13 小时前
数据结构3
服务器·c语言·数据结构·vscode
半盏茶香13 小时前
启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
java·开发语言·数据结构·c++·python·算法·链表