数据结构(C++描述)电子教案第3章-精选(公开课件).pptVIP

  • 2
  • 0
  • 约7.3千字
  • 约 57页
  • 2018-11-02 发布于广西
  • 举报

数据结构(C++描述)电子教案第3章-精选(公开课件).ppt

4.函数的嵌套调用 在函数嵌套调用中,一个函数的执行没有结束,又开始另一个函数的执行,因此必须用栈来保存函数中中断的地址,以便调用返回时能从断点继续往下执行。 例 设有一个主程序,它调用函数a,函数a又调用函数b,函数b又调用函数c,(见下页),其中r,s,t分别表示中断地址,我们可以用一个栈来描述调用情况(见下页)。 主程序调用函数a,留下一个断点地址r进栈,然后主函数处于挂起状态,进入函数a中执行,函数a中再调用函数b,留下一个断点地址s进栈,然后函数a处于挂起状态,进入函数b中执行,函数b中调用函数c, 留下一个断点地址t进栈, 然后函数b处于挂起状态,进入函数c中执行,函数c执行完后,要返回断点处继续执行,但返回到那一个断点呢?根据栈顶元素来决定。返回时,执行退栈操作,先退出t,故返回t断点继续执行, 接着退栈退出s,故返回s断点继续执行,接着退栈退出r,返回r断点继续执行,最后栈为空,算法结束。 5. 函数的递归调用 函数的递归调用也是一种嵌套, 故也必须用栈来保存断点信息,但递归调用相当于同一个函数的嵌套调用,故除了保存断点信息外,还必须保存每一层的参数、局部变量等。 例3-7 求n! 可用递归函数描述如下: 1 n=0 n! = n*(n-1)! n0 3.2 队列 3.2.1 队列的定义 仅允许在一端进行插入,另一端进行删除的线性表,称为队列(queue)。允许插入的一端称为队尾(rear),允许删除的一端称为队头(frort)。 队列是一种先进先出(First In First Out)的特殊线性表,或称FIFO表。 若队列中没有任何元素,则称为空队列,否则称为非空队列。 队列的描述可以用如图3-9的方式所描述。 3.2.2 队列的基本运算 队列可定义如下五种基本运算: 1.初始化队列 INIQUEUE(Q) 将队列Q设置成一个空队列。 2.入队列 ENQUEUE(Q,X) 将元素X插入到队尾中,也称“进队” ,“插入”。 3.出队列 DLQUEUE(Q) 将队列Q的队头元素删除,也称“退队”、“删除”。 4.取队头元素 GETHEAD(Q) 得到队列Q的队头元素之值。 5.判队空 EMPTY(Q) 判断队列Q是否为空,若为空返回1,否则返回0。 3.2.3 队列的抽象数据类型描述 队列的抽象数据类型可描述为:ADT QUEUE IS DATA:含有n个元素a1,a2,a3,…an,按FIFO规则存放,每个元素的类型为elemtype Operation: Void INIQUEUE(Q) //将队列Q设置成一个空队列。Void ENQUEUE(Q,X)//将元素X插入到队尾中,也称“进队” ,“插入”。 Void DLQUEUE(Q) //将队列Q的队头元素删除,也称“退队”、“删除”。 Elemtype GETHEAD(Q) //得到队列Q的队头元素之值。 int EMPTY(Q) 判断队列Q是否为空,若为空返回1,否则返回0。 End queue * 第3章 栈和队列 数据结构(C++描述) 3。1 栈 3。2 队列 退出 目录 3.1 栈 3.1.1 栈的定义 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。 3.1.2栈的运算 1.初始化栈:INISTACK(S) 将栈S置为一个空栈(不含任何元素)。 2.进栈:PUSH(S,X) 将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。 3.出栈: POP(S) 删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。 4.取栈顶元素: GETTOP(S) 取栈S中栈顶元素。 5.判栈空: EMPTY(S) 判断栈S是否为空,若为空,返回值为1,否则返回值为0。 3.1.3栈的抽象数据类型描述 ADT

文档评论(0)

1亿VIP精品文档

相关文档