网站大量收购独家精品文档,联系QQ:2885784924

pascal-栈和队列.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
pascal-栈和队列.doc

栈 .栈的特点:   栈是一种线性表,对于它所有的插入和删除都限制在表的同一端进行,这一端叫做栈的“顶”,另一端则叫做栈的“底”,其操作特点是“后进先出”。  .栈的 定义:    — 顺序栈 s为栈、p为指向栈顶的指针 type    stack=record      data:array[1..m] of datatype;      p:0..m    end;   var    s:stack; — 链式栈 bottom 当栈的容量无法估计时,可采用链表结构 --链式栈. 链式栈的栈顶在链头. 无栈满问题,空间可扩充. 进栈(插入)与出栈(删除)都在栈顶处执行.  .栈的基本:   (1)栈push(s,x):往栈中推入x的项目;     若p=m则(overflow)     否则:=p+1;s[p]:=x; (2)出栈pop(s):栈中弹出;     若p=0则(underflow)     否则p:=-1;   (3)读栈顶元素top(,x):把栈顶元素的值读到变量x中,栈保持不变;     若=0则(error)     否则x:=[p];   (4)判栈是否为空sempty(s):这是一个布尔函数,当栈sp中没有元素(即t=0)时,称它为空栈,函数取真值,否则值为假。     若p=0则sempty:=true     否则sempty:=false;  .栈的应用(1)表达式的三种形式:  中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3;  后缀表达式:如:(2+1)*3表示为后缀表达式为2 1 + 3 *;   前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3。 (2)表达式的计算由于后缀表达式中没有括号,不需判别优先级,计算严格从左向右进行,故计算一个后缀表达式要比计算机一个中缀表达式简单得多。  1当读到数字直接送至中  2当读到运算符t时,     a.将栈中所有优先级高于或等于t的运算符弹出,送到中;     b.t进栈  3读到左括号时总是将它压入栈中  4读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至后,再丢弃左括号。 程序} 2、若表达中操作数为非个位数值,如何实现表达式计算。 队列  1.队列的特点:   队列也是一种线性表,对于它所有的插入都在队列的一端进行,所有的删除都在另一端进行,进行删除的一端叫队列的“头”(front),进行插入的一端叫队列的“尾”(rear),其操作特点是“先进先出”。 (FIFO, First In First Out)  2.队列的抽象数据 定义:  (1)队列的数组表示?? type    queue=record      data:array[1..m] of datatype;      front,rear:1..m    end;   var    q:queue; (2)队列的链接表示 — 链式队列 队头在链头,队尾在链尾。 链式队列在进队时无队满问题,但有队空问题。 队空条件为 front =nil 链式队列编码举例 type queue=^struct; struct=record data: datatype; link:queue; end; var front,rear,q1,q2:queue; (3)循环队列:存储队列的数组(或链表)被当作首尾相接的表处理 3.队列的基本操作:   (1)队列的插入enq(q,x):在队列q中插入一个值为x的元素,也称为进队;     q[rear]:=x;     若rear=m则rear:=1     否则rear:=rear+1;     若rear=front则write(overflow)   (2)队列的删除deq(q):从队列q中删除一个元素,也称为出队;     若rear=front则write(underflow)     否则      若front=m则front:=1否则front:=front+1;   (3)读队头元素front(q,x):将队列q中头部元素的值读到x中;     若rear=front则write(error)     否则x:=q[front];   (4)判队列是否为空qempty(q):这是一个布尔函数,当q是空队列时,取真值,否则取假值。     若rear=front则qempty:=true     否则qempty:=false;  3.队列的应用:   例、广义表(是线性表的一种推广;允许构成线性表的元素本身又可以是线性表,则

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档