D4-认识栈结构
认识栈
栈是一种常见的数据结构
数组是一种线性结构,并且可在睡着任意位置插入和删除数据
而栈和队列就是常见的 “受限的线性结构”
栈结构图

栈(stack),是一种受限的线性表,后进先出(LIFO)
- 其受限制是仅允许在“
” 进行插入和删除运算。这一端称为“
”,相对为“
“
- LIFO(last in first out)表示最后进入的元素,第一个弹出栈空间。类似于自动餐托盘,最后放上的盘子,最先拿出去用,最后收到的邮件,最新被看到。程序就是生活的抽象体现。
- 向一个栈插入新元素被称为
,
或
,它就是把新元素放在栈顶元素的上面,使之称为新的栈顶元素;
- 向一个栈删除元素又被称为
,就是把栈顶元素删除掉。使其相邻的元素称为新的栈顶元素
- 其受限制是仅允许在“
程序中的应用:
- 函数调用栈
- 函数之间相互调用,A调用B,B调C,C又调用D
- 执行的过程中,回先将A压入栈,A没有执行完,所有不会弹出栈
- A执行过程中调用了B,会将B压入栈。这时候B在栈顶,A在栈底
- 如果B执行完,B会弹出栈,但是By有执行完么,没有,又调用了C
- 所以C会压栈,并在栈顶,而C调用了D,D会压入到栈顶
- 所以:当前栈顺序:栈底A-B-C-D栈顶
- D执行完,弹出栈,C/B/A依次弹出栈
- 所以函数调用栈,就来自他们内部的实现机制(通过栈来实现的)
- 而递归是一直调用自己,导致栈溢出。。
