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