线性结构——数组、栈和队列.docVIP

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

线性结构——数组、栈和队列 相关知识: 一维数组 | 多维数组 | 栈 | 队列 | 串 一、一维数组  1.一维数组的存储   由于数组中所有元素属于同一类型,所以每个元素在存储器中占用的空间大小相同。   假设数组的第一个元素存放的位置为LOC(k[1]),每个元素占用的空间大小为S,则k[i]的存放位置为:       LOC(k[i])=LOC(k[1])+S*(i-1)组  2.一维数组的操作——元素的插入和删除   由于需要保持运算结果仍然是顺序存储,所以在进行元素的插入和删除时可能要移动一系列元素。例子:Josephus(约瑟夫)问题。  3.例题:    (1)猴子选大王——n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置? (monky.pas) (2)狐狸捉兔子——围绕着山顶有10个洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你从10号洞出发,先到1号洞找,第二次隔1个洞找,第三次隔2个洞找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?(fox.pas)   (3)约瑟夫问题——设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,……,如此重复直到所有的人全部出列为止。对于任意给定的n,s和m,求出按出列次序得到的n个人员的顺序表。二、多维数组   多维数组是在一维数组的基础上发展起来的,可以看成由多个一维数组组成。储存一个数组中的所有元素,可以用线性序列来表示。以二维数Amn为例,储存元素的规律通常有“行优先”和“列优先”。   A32 = a11 a12 a13      a21 a22 a23      a31 a32 a33   按“行优先”的顺序:a11 a12 a13 a21 a22 a23 a31 a32 a33   按“列优先”的顺序:a11 a21 a31 a12 a22 a32 a13 a23 a33   将二维数组Amn按“行优先”顺序储存在内存以后,元素aij的地址计算函数为:      LOC(aij)=LOC(a11)+(i-1)*n+(j-1)   按“列优先”顺序储存在内存以后,元素aij的地址计算数为:      LOC(aij)=LOC(a11)+(j-1)*m+(i-1)   三维数组Almn按“行优先”为:LOC(aijk)=LOC(a111)+(i-1)*m*n+(j-1)*n+(k-1)   按“列优先”为:LOC(aijk)=LOC(a111)+(k-1)*l*m+(j-1)*l+(i-1) 三、栈  1.栈的特点:   栈是一种线性表,对于它所有的插入和删除都限制在表的同一端进行,这一端叫做栈的“顶”,另一端则叫做栈的“底”,其操作特点是“后进先出”。  2.栈的一般定义:   type    stack=record        data:array[1..m] of datatype;        t:0..m    end;   var    s:stack;  3.栈的基本运算:   (1)栈的插入push(s,x):往栈s中推入一个值为x的项目;     若t=m则print(overflow)     否则t:=t+1;data[t]:=x;   (2)栈的弹出pop(s):从栈s中弹出一个项目;     若t=0则print(underflow)     否则t:=t-1;   (3)读栈顶元素top(s,x):把栈顶元素的值读到变量x中,栈保持不变;     若t=0则print(error)     否则x:=data[t];   (4)判栈是否为空sempty(s):这是一个布尔函数,当栈st中没有元素(即t=0)时,称它为空栈,函数取真值,否则值为假。     若t=0则sempty:=true     否则sempty:=false;  4.栈的应用之一——计算表达式的值   (1)表达式的三种形式:     中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3;     后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *;     前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3。   (2)表达式的计算:   由于后缀表达式中没有括号,不需判别优先级,计算严格从左向右进行,

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档