NOIP基础数据结构-栈、队、堆.pptVIP

  1. 1、本文档共27页,可阅读全部内容。
  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文档。上传文档
查看更多
NOIP基础数据结构-栈、队、堆

your family site your site here LOGO c LOGO NOIP基础数据结构 江涛 队列、栈、堆概念与应用 目录 栈 队列 堆 3 数组 1 2 4 目录 数组的特性 数组 数组(array)的元素(element)或项(item) 的类型是相同的 数组的大小是固定的、静态的、连续的 数组对某元素的存取是O(1)时间 数组的插入、删除操作是O(n)时间 “订制”数组 数组 由于数组通常的插入、删除操作是O(n)时间的,在某些特定的条件下就显得低效了.因此我们通过对数组元素操作的限制,来达到操作的高效---算法优化的突破点。 常见的“订制”数组有:栈、队列、堆等.它们操作的时间效率都很高。 注:虽然栈、队列、堆可以不用数组实现,但NOIP的实践中,用数组更简单实用。 栈(stack)的图示 栈 栈的特性 栈 信息学中的栈一般就是用数组实现 栈(stack)是后进先出(last-in-first-out,LIFO)或先进后出(FILO)的 栈有三个基本操作压入(push),弹出(pop),取数(getTop)操作都为O(1)时间 栈有一个计数器counter或栈顶指针 栈的实现样例Pascal代码 栈 const maxn = 1000; var stack:array[1..maxn] of integer; counter:integer; Procedure push(x:integer); begin //入栈 inc(counter); stack[counter] :=x; end; function pop():integer; begin //出栈 pop:=stack[counter]; dec(counter); end; 栈的实现样例C++代码 栈 const int maxn=1000; int stack[maxn], counter=0; void push(int x) //入栈 { stack[++counter]=x; } int pop() //出栈 { return stack[counter--]; } 栈的常见应用举例 栈 括号匹配--- 判断字符串({[]}(){({{[()]}})}是否括号匹配 运算表达式--- 计算表达式 3*(5-(2-3)*(6+5))+8*5 回溯的非递归写法 凸包的graham扫描算法 队列(queue)的图示 队列 队列的特性 队列 信息学中的队列一般也用数组实现 队列(queue)是先进先出(first-in-first-out,FIFO)或后进后出(LILO)的 队列有三个基本操作入队(push)、出队(pop)、取头(getHead)操作都为O(1)时间 队列有队头front和队尾back两个指针,一般也有个计数器counter const maxn = 1000; var queue:array[1..maxn] of integer; front,back,counter:integer; procedure push(x:integer); begin inc(counter); inc(back); //这样的话front,back初始化为1,0 queue[back] :=x; end; function pop():integer; begin pop:=queue[front]; inc(front); dec(counter); end; 队列的实现样例Pascal代码 队列 const int maxn=1000; int queue[maxn],counter=0, front=0,back= -1 ; void push(int x){ queue[++back]=x;++counter; } int pop(){ --counter; return queue[front++]; } 队列的实现样例C++代码 队列 由于front和back一直向后移动, 有可能counter不大,但back却超过maxn, 而引起数组越界。 数组实现队列的可能缺点 队列 ……… front back 在保证countermaxn情况下,可以用循环 数组利用的策略来充分利用数组空间。 通常方法为每次front:=front+1;后加上 if frontmaxn then front:=1; 同样的,

文档评论(0)

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

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

1亿VIP精品文档

相关文档