数据结构(知识点碎片六)

144 阅读2分钟

 八、栈

(一)、逻辑结构

栈是一种只能在一端进行插入或删除操作的线性表。栈也称为后进先出表。 91aa481c386f81396c55b949a5dd6f8.png

栈抽象数据类型=逻辑结构+基本运算(运算描述)

栈的几种基本运算如下: b24c1393636fa0534e9593d47a749c3.png

若算出栈序列p可能取值的个数,逆向思维哪些值不可能在p序列出栈(绝不可能是p已出栈的值)。

 (二)、存储结构

输出序列:由出栈序列判断栈容量(将入栈出栈过程模拟出来)。

出栈序列和上一个出队序列一致

d9d5bc311343d6801638d7b59f77a90.jpg

出栈序列是上一个出栈序列相逆

091379fad2f1bf3a25b9880a8d29f9a.jpg

求以某元素为出栈开头的序列个数,主要看未进栈元素如何插空。

若入栈序列是一个升序序列,其栈顶元素一定大于其下方的元素;如果最后一个入栈的元素第一个出栈,那其余元素的出栈序列就是固定的。

a620c29bdc4ae1e6f5eb2c8247611b8.jpg

已知第n位出栈序列的值,求第n+1位出栈序列的值,可逆向思维哪些值不可能出现(绝不可能是已出栈的值)

eba393fb8cd1426da7151b0072c0c6a.jpg

n个不同的元素通过一个栈产生的出栈序列的个数为卡特兰数。

cbddf78a7a9e038c0522010ee6291f6.jpg

 1.顺序栈

采用顺序存储结构的段称为顺序栈。 4cc1b8f084c68e7ea7aa2131ad42e8a.jpg 1ec1afe7d4f8a12012074303928a64a.jpg f282d97a88b110076d11f5294e208ce.jpg

栈空的条件:s->top==-1。(初始时设置s->top=-1)
栈满的条件:s->top==MaxSize-1(data数组的最大下标)。
元素e的进栈操作:先将栈顶指针 top 增1,然后将元素e放在栈顶指针处。
出栈操作:先将栈顶指针 top 处的元素取出放在e中,然后将栈顶指针减1。

2.链栈

采用链式存储结构的栈称为链栈。 8ae04a49cced68dc58607275d369f02.jpg 62ede698f742ee5c0d498aedbb36bbd.jpg d657251d4d266be7bbe4c939db8b466.jpg