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

信息技术竞赛培训课件教程数据结构.docVIP

信息技术竞赛培训课件教程数据结构.doc

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共45页,可阅读全部内容。
  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程序设计中,常遇的一种错误就是“栈”超界,那么,“栈”为何物呢? 栈是只能在某一端插入和删除的特殊线性表。 用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。  栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表(LIFO表)。  一个栈可以用定长为N的数组S来表示,用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP0时为下溢。栈指针在运算中永远指向栈顶。 1、进栈(PUSH)算法 ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②); ②置TOP=TOP+1(栈指针加1,指向进栈地址); ③S(TOP)=X,结束(X为新进栈的元素); 2、退栈(POP)算法①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈,空则下溢;不空则作②);②X=S(SOP),(退栈后的元素赋给X);③TOP=TOP-1,结束(栈指针减1,指向栈顶)。  进栈、出栈的Pascal实现过程程序: CONST n=100; TYPE stack=ARRAY[1..n] OF integer; PROCEDURE PUSH(VAR s:stack;VAR top,x:integer);{入栈} BEGIN IF top=n THEN writeln(overflow) ELSE BEGIN top:=top+1;s[top]:=x; END; END; PROCEDURE POP(VAR s:stack;VAR y,top:integer);{出栈} BEGIN IF top=0 THEN writeln(underflow) ELSE BEGIN y:=s[top];top:=top-1; END END; 对于出栈运算中的“下溢”,程序中仅给出了一个标志信息,而在实际应用中,下溢可用来作为控制程序转移的判断标志,是十分有用的。对于入栈运算中的“上溢”,则是一种致命的错误,将使程序无法继续运行,所以要设法避免。 堆栈的数组模拟 十进制数N和其它d进制数的转换是实现计算的基本问题,解决方法很多,下面给出一中算法原理:N=(N div d)×d+N mod d (其中 div 为整除运算,mod为求余运算)。 例如:(1348)10=(2504)8运算过程如下: N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 N N div 8 N mod 8 9413 ? ? ? ? ? ? ? ? ? ? ? ? 1、? 填空: (9413)10=( )8=( )16=( )2 2、下面的程序实现这个转换过程,请补充完整。 数制转化程序【xoi00_07.pas】 program xoi00_07; const size=100; var a:array[1..size] of integer; n,d,i,j:integer; begin writeln; write(Please enter a number(N) base 10:); readln(n); write(please enter a number(d):); readln(d); i:=1; repeat a[i]:=n mod d; n:=n div d; inc(i); until n=0; for j:=i-1 downto 1 do write(a[j]:5); end. 出站进站2 出站 进站 1、? 如果进站的车厢序列为123,则可能的出战车厢序列是什么? 2、? 如果进展进站的车厢序列为123456,问能否得到135426和435612的出站序列。 ? ? 栈的用途极为广泛,在源程序编译中表达式的计算、过程的嵌套调用和递归调用等都要用到栈,下面以表达式计算为

文档评论(0)

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

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

1亿VIP精品文档

相关文档