3.1_栈和队列_栈

【栈的定义】

栈(stack)是限定仅在表尾进行插入和删除操作的线性表。

栈又称为后进先出(Last In First Out)线性表,简称LIFO结构。

(PS:定义中的表尾是指 栈顶!)

【几个关键词 】

[ 栈顶(top) ]

允许插入和删除的一端称为 栈顶。

[ 栈底(bottom) ]

栈顶的另一端称为 栈底。

[ 空栈 ]

不含任何数据元素的栈。

【栈的插入操作——进栈(push)】

  栈的插入操作,叫做进栈,也称为压栈、入栈。

【栈的删除操作——出栈(pop)】

  栈的删除操作,叫做出栈,也称为弹栈。

【进栈出栈的变化形式】

如果3个整数1,2,3依次入栈,会有哪些出栈次序?

第一种:1-2-3进栈,即3-2-1出栈。

第二种:1进,1出,2斤,2出,3进,3出,进一个出一个,即1-2-3出栈。

第三种:1进,2进,2出,1出,3进,3出,即2-1-3出栈。

第四种:1进,1出,2进,3进,3出,2出,即1-3-2出栈。

第四种:1进,2进,2出,3进,3出,2出,即2-3-1出栈

【栈的抽象数据类型】

ADT 栈(stack)
Data
    同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。
Operation
    InitStack(*S)    初始化操作,建立一个空栈S
    DestoryStack(*S) 若栈存在,则销毁它
    ClearStack(*S)   将栈清空
    StackEmpty(S)    若栈为空,返回true,否则返回false。
    GetTop(S,*e)     若栈S存在且非空,用e返回S的栈顶元素。
    Push(*S,e)       若栈S存在,插入新元素e到栈S中并成为栈顶元素。
    Pop(*S,*e)       删除栈S中栈顶元素,并用e返回其值。
    StackLength(S)   返回栈S的元素个数。
endADT
时间: 2024-12-14 06:17:28

3.1_栈和队列_栈的相关文章

数据结构(7)----栈与队列之栈的应用四则运算表达式求值

栈与队列之栈的应用四则运算表达式求值 栈在四则运算表达式求值的应用为逆波兰表达式(后缀表达式) 普通算式(中缀表达式):9 + (3 - 1) * 3 + 10 / 2     ---(1) 逆波兰表达式(后缀表达式):9 3 1 - 3 * + 10 2 /         ---(2) 1:逆波兰表达式的计算规则 从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈,进行运算,再把运算结果进栈,一直到最终获得结果.接下来我们以(2)式为例:

【栈和队列】栈和队列的基本应用(C++版)

栈和队列的应用非常之广,只要问题满足后进先出和先进先出原则,均可使用栈和队列作为其数据结构. (注意:在下面的代码中,我直接使用C++标准库提供的模板stack和queue,如果您用C语言,则要用前面介绍的方法自己实现stack和queue) 栈的应用 数制转换: 将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,很容易通过"除B取余法"来解决. [例]将十进制数13转化为二进制数. 解答:按除2取余法,得到的余数依次是1.0.1.1,则十进制数转化为二进制数为1101

《大话数据结构》笔记(4-1)--栈与队列:栈

栈的Java实现代码: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/Stack.java 逆波兰算法实现: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/RPN.java 第四章  栈与队列 栈 定义 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(b

LeetCode225 栈·用队列实现栈(C++)

题目描述: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的. 你所使用的语言也许不支持队列. 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可. 你可以假设所有操作都

数据结构复习--栈和队列(1)--栈

1.栈和队列简介: 栈和队列是非常重要的两种数据结构,在软件设计中应用很多.栈和队列也是线性结构,线性表,栈和队列这三种数据元素和数据元素间的逻辑完全相同.差别是线性表的操作不受限制,而栈和队列的操作收到限制,栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以把栈和队列称为操作受限的线性表 栈: 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入,删除等操作,所以,它具有特殊含义,把表尾成为栈顶(Top),另一端是固定的,叫栈底(Botto

算法习题---栈与队列之栈的数学性质

一:栈的数学性质 当n个编号元素以某种顺序进栈,并且可以在任意时刻出栈,所获得的编号元素排列的数目N恰好满足Catalan函数的计算,即 二:题目一: 试着将1,2,3,4,5,6,六个数字入栈,则出栈方式有几种?使用数学性质可以知道有132种 三:其他题目:判断栈给定的操作序列的合法性 I入栈O出栈,例如ABC入栈,出栈为CBA,那么给定序列为IIIOOO,表示3个先入栈,然后出栈 现在给定一个序列(只含IO)要求判断其是否合法 四:性质 1.IO个数一致 2.开始到中间任一位置I的数目大于O

【数据结构】栈与队列 Part1:栈的创建与相关函数

First.栈(Stack) 定义:后进先出的线性表 操作: #include<stack> 头文件 stack<int> s;      创建int类型的栈s s.push(x);           将x放入栈中 s.top();               读取栈顶元素 s.pop();              释放栈顶 s.size();              返回栈中元素数目 s.empty();          若栈为空则返回真,反之则返回假 示范代码: 1 #

栈————用队列实现栈

1 class MyStack { 2 public: 3 queue<int> q; 4 /** Initialize your data structure here. */ 5 MyStack() { 6 7 } 8 /* 9 -------------- 10 push pop 11 front 12 */ 13 /** Push element x onto stack. */ 14 void push(int x) { 15 //push之后把x放到最前面就可以了 16 q.pus

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性