1 / 16

第 3 章 栈和队列 - 栈

数据结构讲义. 第 3 章 栈和队列 - 栈. 嘉应学院 数学系. 进栈. 出栈. 栈顶. a n. ……. 栈 s=(a1,a2,……,an). a 2. 栈底. a 1. 3.1 栈( stack ) 一、 栈的定义:限定仅在 表尾 进行插入或删除操作的线性表,表尾— 栈顶 ,表头— 栈底 ,不含元素的空表称空栈 特点:先进后出( FILO ) 或后进先出( LIFO ). 栈的基本操作. 1. 初始化栈: INISTACK(&S) 将栈 S 置为一个空栈 ( 不含任何元素 ) 。 2. 进栈: PUSH(&S,X)

Download Presentation

第 3 章 栈和队列 - 栈

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据结构讲义 第3章 栈和队列-栈 嘉应学院 数学系

  2. 进栈 出栈 ... 栈顶 an ……... 栈s=(a1,a2,……,an) a2 栈底 a1 3.1 栈(stack) 一、 栈的定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 • 特点:先进后出(FILO)或后进先出(LIFO)

  3. 栈的基本操作 1.初始化栈:INISTACK(&S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH(&S,X) 将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。 3.出栈: POP(&S) 删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。 4.取栈顶元素: GETTOP(S,&e) 取栈S中栈顶元素。 5.判栈空: StackEmpty(S) 判断栈S是否为空,若为空,返回值为true,否则返回值为false。

  4. 栈的操作演示

  5. 问题 一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗?12345的输出呢? • 43512不可能实现,主要是其中的12顺序不能实现; • 12345的输出可以实现,只需压入一个立即弹出一个即可。

  6. 栈的应用:数制转换 • 如十进制数N转换成d进制数C: N=cndn + cn-1dn-1 +…+ c1d1+ c0 C=(cn cn-1 … c0) • 例如: • (14)10= 1*23 + 1*22 + 1*21 + 0 =(1110)2 • (1348)10=2*83 + 5*82 + 0*81 + 4 =(2504)8

  7. (1348)10=2*83 + 5*82 + 0*81 + 4 =(2504)8 n n div 8 n mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 最后得到的“2”最先输出:2504

  8. 栈的应用:表达式计算 例如:3*(7 – 2 ) (1)要正确求值,首先了解算术四则运算的规则: a.从左算到右 b. 先乘除,后加减 c. 先括号内,后括号外 由此,此表达式的计算顺序为: 3*(7 – 2 )= 3 * 5 = 15 (2)根据上述三条运算规则,在运算的每一步中,对任意相继出现的运算符1和2,都要比较优先权关系。

  9. 栈的应用:迷宫求解 右下左上 演示

  10. 栈的顺序实现 顺序栈的类型定义如下: # define StackSize 100 typedef struct { ElemType data[StackSize]; int top; }SqStack; 顺序栈的操作演示flash

  11. top指向栈顶的上一个元素。 • top==0表示空栈。 • top== StackSize-1表示栈满。 • 当栈满时再做进栈运算必定产生空间溢出,简称“上溢”;当栈空时再做退栈运算也将产生溢出,简称“下溢”。 • 上溢是一种出错状态,应该设法避免之;下溢一般是正常现象,常常用来作为程序控制转移的条件。

  12. 顺序栈示例代码

  13. 顺序栈的共享单元 顺序栈的共享单元操作演示flash

  14. 栈的链式实现 typedef struct Node{ ElemType elem; struct Node *next; }SNode; • 可附加一个头节点。 • 插入和删除仅在头节点处进行。 • 没有栈满的限制。

  15. 链栈示例代码 • 可以看到,主函数和顺序栈时的ch3_sstack.c一模一样。即逻辑结构完全相同,存储结构不同而已。

  16. 作业 • 1、对于一个栈,给出输入项A、B、C,如果输入项序列由ABC组成,试给出所有可能的输出序列。 • 2、如果一个栈的输入序列为123456,能否得到435612和135426的出栈序列? • 3、设依次进入一个栈的元素序列为c,a,b,d,则可得到出栈的元素序列是: • A)a,b,c,d B)c,d,a,b C)b,c,d,a D)a,c,d,b

More Related