北京化工大学数据结构课件第三章 栈和队列.pptVIP

  • 0
  • 0
  • 约6.33千字
  • 约 60页
  • 2019-05-06 发布于广东
  • 举报

北京化工大学数据结构课件第三章 栈和队列.ppt

3.1.1 栈的定义 3.1.1 栈的定义 3.1.1 栈的定义 举例1:家里吃饭的碗,通常在洗干净后一个一个地落在一起存放,在使用时,若一个一个地拿,一定最先拿走最上面的那只碗,而最后拿出最下面的那只碗。 举例2:在建筑工地上,使用的砖块从底往上一层一层地码放,在使用时,将从最上面一层一层地拿取。 3.1.2 栈的基本操作 1.初始化栈:INITSTACK(S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH( S, x ) 将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。 3.出栈: POP(S,x ) 删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。 4.取栈顶元素: GETTOP(S,x ) 取栈S中栈顶元素。 5.判栈空: ISEMPTY(S) 判断栈S是否为空,若为空,返回值为TRUE,否则返回值为FALSE。 3.1.2 栈的基本操作 6. 清空栈:CLEARSTACK(S) 将栈置为空栈; 7、判栈满:ISFULL(S) 判断栈S是否满,若已满,返回值为TRUE,否则返回 值为FALSE 3.1.3 顺 序 栈 是用一组连续的存储单元依次存放栈中的每个数据元素,并用起始端作为栈底。 3.1.3 顺 序 栈 类型定义如下所示: #define TRUE 1 #define FALSE 0 #define MAXSIZE 50 typedef struct stack{ StackElementType elem[MAXSIZE]; int top; //栈顶指针 }SeqStack; 3.1.3 顺 序 栈 3.1.4 链 栈 若是栈中元素的数目变化范围较大或不清楚栈元素的数目,就应该考虑使用链式存储结构。人们将用链式存储结构表示的栈称作“链栈”。 它是一种限制运算的链表,即规定链表中的插入和删除运算只能在链表开头进行。所以链表的表头指针就作为栈顶指针。 3.1.4 链 栈 3.1.4 链 栈 定义如下: typedef struct node { StackElementType data; struct node *next; } LinkStackNode, *LinkStack; 直到扫描完毕。这时运算符栈为空,操作数栈中只有一个元素,即为运算的结果。 例:求无括号的算术表达式1 + 2 * 3 – 4 / 2# 的值, 运算符优先级:# + - * / * * ① ② ③ ④ 栈的变化如下: 步骤 操作数栈 运算符栈 说明 开始 两栈均为空 1 1 1进入操作数栈 +进入运算符栈 2进入操作数栈 *进入运算符栈 3进入操作数栈 退栈 2*3进入操作数栈 退栈 1+6进入操作数栈 2 3 4 5 6 7 8 9 1 + 1 2 + 1 2 + 1 1 1 7 + * 2 3 6 + * + 步骤 操作数栈 运算符栈 说明 10 7 -进入运算符栈 4进入操作数栈 /进入运算符栈 2进入操作数栈 #进入运算符栈,退栈 4/2进入操作数栈 退栈 7-2进入操作数栈 11 12 13 14 15 16 17 7 4 - 7 4 - / 7 4 2 - / 7 7 2 - - - 5 带括号的算术表达式: 先左后右; 先乘除,后加减; 先括号内,后括号外; (见表3-1 算符之间的优先关系) 2.函数的嵌套调用 在函数嵌套调用中,一个函数的执行没有结束,又开始另一个函数的执行,因此必须用栈来保存函数中断的地址,以便调用返回时能

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档