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

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

ID:14826448

大小:42.00 KB

页数:7页

时间:2018-07-30

线性结构——数组、栈和队列_第1页
线性结构——数组、栈和队列_第2页
线性结构——数组、栈和队列_第3页
线性结构——数组、栈和队列_第4页
线性结构——数组、栈和队列_第5页
资源描述:

《线性结构——数组、栈和队列》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、线性结构——数组、栈和队列相关知识:一维数组

2、多维数组

3、栈

4、队列

5、串一、一维数组 1.一维数组的存储  由于数组中所有元素属于同一类型,所以每个元素在存储器中占用的空间大小相同。  假设数组的第一个元素存放的位置为LOC(k[1]),每个元素占用的空间大小为S,则k[i]的存放位置为:      LOC(k[i])=LOC(k[1])+S*(i-1)组 2.一维数组的操作——元素的插入和删除  由于需要保持运算结果仍然是顺序存储,所以在进行元素的插入和删除时可能要移动一系列元素。例子:Josephus(约瑟夫)问题。 3.例题:   (1)猴子选大王—

6、—n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?(monky.pas)(2)狐狸捉兔子——围绕着山顶有10个洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你从10号洞出发,先到1号洞找,第二次隔1个洞找,第三次隔2个洞找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?(fox.pas)  (3)约瑟夫问题——设有n个人围坐在

7、一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,……,如此重复直到所有的人全部出列为止。对于任意给定的n,s和m,求出按出列次序得到的n个人员的顺序表。作业邮箱:sxnoip2006@163.com二、多维数组  多维数组是在一维数组的基础上发展起来的,可以看成由多个一维数组组成。储存一个数组中的所有元素,可以用线性序列来表示。以二维数Amn为例,储存元素的规律通常有“行优先”和“列优先”。  A32=a11a12a13     a21a22a23     a31a32a33  按“行优先”的

8、顺序:a11a12a13a21a22a23a31a32a33  按“列优先”的顺序:a11a21a31a12a22a32a13a23a33  将二维数组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)  按“列优

9、先”为:LOC(aijk)=LOC(a111)+(k-1)*l*m+(j-1)*l+(i-1)三、栈 1.栈的特点:  栈是一种线性表,对于它所有的插入和删除都限制在表的同一端进行,这一端叫做栈的“顶”,另一端则叫做栈的“底”,其操作特点是“后进先出”。 2.栈的一般定义:  type   stack=record       data:array[1..m]ofdatatype;       t:0..m   end;  var   s:stack; 3.栈的基本运算:  (1)栈的插入push(s,x):往栈s中推入一个值为x的项目;    若t=

10、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    

11、否则sempty:=false; 4.栈的应用之一——计算表达式的值  (1)表达式的三种形式:    中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3;    后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:21+3*;    前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:*+213。  (2)表达式的计算:  由于后缀表达式中没有括号,不需判别优先级,计算严格从左向右进行,故计算一个后缀表达式要比计算机一个中缀表达式简单得多。

12、  (2+1)*3;将中缀表达式转换为后缀表达式的算法思想:  ·当读到数字直接送至输出队列中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。