[计算机软件及应用]数据结构的基本知识算法基本概念介绍.pptVIP

  • 11
  • 0
  • 约1.56万字
  • 约 83页
  • 2018-03-04 发布于浙江
  • 举报

[计算机软件及应用]数据结构的基本知识算法基本概念介绍.ppt

[计算机软件及应用]数据结构的基本知识算法基本概念介绍

数据结构的基本知识 二、数据结构的研究内容 1、数据的逻辑结构 2、数据的存储结构 3、数据的处理 线性表 二、链接存储 3、双向链表基本操作 3、循环链表基本操作 栈 3、双栈操作 三、栈的应用 程序: 程序: 例3:中缀表达式转化为后缀表达式 例4:中缀表达式的求值。 四、链接存储的栈 五、栈与递归 例1: 用递归计算n! 六、栈与回溯   作业 (4)读取栈顶元素readtop(hs) functionreadtop(hs:link):elemtype; begin if hs=nil then writeln(‘underflow’) else readtop:=hs^.data end; (5)判断栈空sempty(hs) function sempty(hs:link):elemtype; begin sempty:=(hs=nil); end; pascal语言中,如果在一个函数、过程等的定义或说明内部又直接或间接地出现有对自身的引用,则称它们是递归的或者是递归定义的。 例如,在数学上,所有偶数的集合可递归地定义为: ①0是一个偶数; ②一个偶数和2的和是一个偶数。 可见,仅需两句话就能定义一个由无穷多个元素组成的集合。在程序中,递归是通过函数或过程的调用来实现的。函数或过程直接调用其自身,称为直接递归;函数或过程间接调用其自身,称为间接递归。 n!可以由下列公式表示: 这是递归定义简单而典型的例子。 程序: program p1(input,output); var n:integer;s: integer; function fac(a:integer):integer; begin if a=0 then fac:=1 else fac:=a*fac(a-1); end; begin readln(n); s:=fac(n); writeln(n,‘!=’,s) end. a=5 {fac(5)} a=4 {fac(4)} a=3 {fac(3)} a=2 {fac(2)} a=1 {fac(1)} a=0 {fac(0)} 栈用于存放递归调用中不断产生的新的局部变量 a=0 {fac(0)} a=1 {fac(1)} a=2 {fac(2)} a=3 {fac(3)} a=4 {fac(4)} a=5 {fac(5)} 1 1 2 2 1 1 6 6 24 24 120 ⑷出栈pop(s,x):若栈s不空,把栈顶元素赋给x,栈顶指针下移;否则返回信息underflow(下溢)。 procedure pop(var s:stack;var x: elemtype); begin if s.top=0 then writeln(‘underflow’) else begin x:=s.data[s.top]; s.top:=s.top -1; end end; 出栈也可用函数来实现: function pop(var s:stack): elemtype ; begin if s.top =0 then writeln(‘underflow’) else begin pop:=s.data[s.top]; s.top:=s.top -1; end end; 出栈操作之后,原栈顶元素依然存在,只是栈顶指针下移,不再指向它。 提醒 ⑸取栈顶元素readtop(s):若栈s不空,,返回栈顶元素的值;否则返回信息underflow。 function gettop(s:stack):elemtype ; begin if s.top=0 then writeln(‘underflow’) else readtop:=s.data[s.top] end; 提醒 这个算法中栈顶指针保持不变,注意与pop(s)的区别 。 当应用中需设立两个栈时(元素类型一致),可以使它们共享一维数组空间s[1..max],两个栈的栈底分别设在数组两端,让两个栈彼此迎面“增长”。仅当两个栈的栈顶指针

文档评论(0)

1亿VIP精品文档

相关文档