栈结构

106 阅读4分钟

栈结构

栈是一种 非常常见 的数据结构,并且在程序中的 应用非常广泛 。

栈结构示意图

image.png

如图;

栈(stack),它是一种受限的线性表,遵循 '后进先出' (LIFO)

其限制是仅允许在 表的一端 进行插入和删除运算。这一段被称为 栈顶,相对的,把另一端成为 栈底。

LIFO(last in first out) 表示就是后进入的元素,第一个弹出栈空间,类似于自助餐的托盘;

向一个栈插入新元素又称作 进栈 、 入栈或压栈, 它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。

从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其它元素成为新的栈顶元素。

下图为程序中一些使用栈的场景

image.png

除此外,递归是通过函数的自调用实现的,如果不给定退出自调用的条件,则会一直不断循环下去,非

常容易出现栈溢出的现象。

关于栈结构的面试题;

image.png

就是说,六个元素进入的顺序依次是6,5,4,3,2,1,但是在进入的过程中可以出栈,找出出栈顺序不可能存在的选项。

题目答案: C

  • A答案: 65进栈,5出栈,4进栈出栈,3进栈出栈,6出栈,21进栈,1出栈,2出栈。
  • B答案: 654进栈,4出栈,5出 3进栈出栈,2进栈出栈,1进栈出栈,6出栈。
  • D答案: 65432进栈,2出栈,3出栈,4出栈,1进栈出栈,5出栈,6出栈。

栈结构实现

  • 实现栈结构有两种比较常见的方式:

    基于数组实现

    基于链表实现

栈封装常用方法

栈常见有哪些操作呢? push(element): 添加一个新元素到栈顶位置;

pop : 移除栈顶的元素,同时返回被移除的元素.

peek0 : 返回栈顶的元素,不对做任何修改 ( 这个方法不会移除栈顶的元素,仅仅返回它)

isEmpty0 : 如果栈里没有任何元素就返回true,否则返回false。

size0 : 返回栈里的 元素个数。这个方法和数组的length属性很类似

toString0: 将栈结构的内容以字符形式返回

栈结构

栈是一种 非常常见 的数据结构,并且在程序中的 应用非常广泛 。

栈结构示意图

image.png

如图;

栈(stack),它是一种受限的线性表,遵循 '后进先出' (LIFO)

其限制是仅允许在 表的一端 进行插入和删除运算。这一段被称为 栈顶,相对的,把另一端成为 栈底。

LIFO(last in first out) 表示就是后进入的元素,第一个弹出栈空间,类似于自助餐的托盘;

向一个栈插入新元素又称作 进栈 、 入栈或压栈, 它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。

从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其它元素成为新的栈顶元素。

下图为程序中一些使用栈的场景

image.png

除此外,递归是通过函数的自调用实现的,如果不给定退出自调用的条件,则会一直不断循环下去,非

常容易出现栈溢出的现象。

关于栈结构的面试题;

image.png

就是说,六个元素进入的顺序依次是6,5,4,3,2,1,但是在进入的过程中可以出栈,找出出栈顺序不可能存在的选项。

题目答案: C

  • A答案: 65进栈,5出栈,4进栈出栈,3进栈出栈,6出栈,21进栈,1出栈,2出栈。
  • B答案: 654进栈,4出栈,5出 3进栈出栈,2进栈出栈,1进栈出栈,6出栈。
  • D答案: 65432进栈,2出栈,3出栈,4出栈,1进栈出栈,5出栈,6出栈。

栈结构实现

  • 实现栈结构有两种比较常见的方式:

    基于数组实现

    基于链表实现

栈封装常用方法

栈常见有哪些操作呢? push(element): 添加一个新元素到栈顶位置;

pop : 移除栈顶的元素,同时返回被移除的元素.

peek0 : 返回栈顶的元素,不对做任何修改 ( 这个方法不会移除栈顶的元素,仅仅返回它)

isEmpty0 : 如果栈里没有任何元素就返回true,否则返回false。

size0 : 返回栈里的 元素个数。这个方法和数组的length属性很类似

toString0: 将栈结构的内容以字符形式返回

image.png