



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五节 指针类型与动态数据结构前面所学的变量都具有共同的特点:系统依据程序说明部分获得变量名和类型信息,即为变量分配对应大小的存储空间,在程序执行过程中,各变量对应的存储空间始终存在且保持不变,这些变量均称为静态变量。与静态变量对应的是动态变量,在程序执行过程中可以动态产生或撤消,所使用的存储空间也随之动态地分配或回收。为了使用动态变量。PASCAL系统提供了指针类型,用指针变量(静态变量)来指示动态变量(存储地址变量)。下面介绍如何利用指针建立动态数据结构。 例5.19 分别用简单变量和指针变量交换两个变量的值。解:设两个变量a,b的值分别为5, 8(1)用简单变量交换
2、:Program Exam519; const a=5; b=8; 常量 var c: integer; begin c:=a; a:=b; b:=c;
3、160; 用简单变量交换Type 指针类型名 = 基类型; writeln(a=:8, a, b=:8, b ); readln end.(2)用指针变量交换:Var 指针变量名 : 基类型;Program Exam519_1;
4、; type pon= integer; pon为指针类型 var a,b,c: pon;
5、60; a,b,c为指针变量 begin New(指针变量); new(a ); new(b ); new(c ); 开辟动态存储单元
6、; a :=5; b :=8; 给a,b指向的存储单元赋值 c:=a; a:=b; b:=c; &
7、#160; 交换存储单元的指针 writeln('a=':8, a , b=':8, b ); 输出a,b所指单元的值 Dispose(指针变量);readln End. 第(2)种方法,对各存储单元所保存的值并不改变,只是交换了指向这些单元的存储地址(指针值),可以简略地用如下图示说明:(图中“”表示指向存储单元)指针类型
8、的指针变量a,b存有各指向单元的地址值,将指针交换赋值步骤为:将c:=a (让c具有a的指针值);将a:=b (让a具有b的指针值);将b:=c (让b具有c的指针值);最后输出a,b所指向存储单元(a 和b )的值,此时的a指向了存储整数8的单元(即a = 8),b指向了存储整数5的单元(即b = 5)。存储单元的值没有重新赋值,只是存放指针值的变量交换了指针值。 程序Exam519_1 Type pon= integer; 是定义指针类型,一般格式为:基类型就是指针所指向的数据元素的数据类型。也可以将类型说明合并在变量说明中直接定义说明:例如
9、Exam519_1中类型说明与变量可以合并说明为:Var a,b,c: integer; 与程序中分开说明的作用相同定义了指针变量的类型之后,必须调用New过程开辟存储单元,调用格式如下:如果不再需要指针变量当前所指向的存储单元,可调用Dispose过程释放所占用的存储单元,Dispose和New的作用正好相反,其格式为:在程序中对所指存储单元(为a )可以视作简单变量进行赋值计算和输出。如:a := 5例5.20 利用指针对数组元素值进行排序。解:定义一个各元素为指针类型的数组a : 定义一个交换指针值的过程
10、(swap); 定义一个打印过程(print); 定义过程(int)将数组b的值赋给a数组各元素所指向的各存储单元。 过程pixu用交换指针值的方式,按a数组所指向的存储单元内容值从小到大地调整各元素指针值,实现“指针”排序; 按顺序打印a数组各元素指向单元的值(a i )。Program Exam520; const n=8; b: array1.n of
11、 integer =(44,46,98,86,36,48,79,71); type pon= integer; var a: array1.n of pon; Procedure swap(var p1, p2: pon); 交换指针 var p: pon; begin p:=p1; p1:=p2;
12、 p2:=p end; Procedure print; 打印数组各元素指向单元(a i )的值 var i: integer; begin for i:=1 to n do write(a i :6); writeln; writeln;
13、 end; Procedure int; 将数组b的值赋给a数组各元素所指向的存储单元 var i: integer; begin for i:=1 to n do begin new(a i
14、 ); a i :=b i ; end; print; end; Procedure pixu; 排序
15、60; var i,j,k: integer; begin for i:=1 to n-1 do begin k:=i; for j:=i+1 to n do
16、; if aj < ak then k:=j; swap(ak, a i ) end end; Begin int; pixu; print; re
17、adln End. 例5.21 有m只猴子要选猴王,选举办法如下:所有猴子按1 . . m编号围坐成圆圈,从第一号开始按顺序1, 2, . . , n连续报数,凡报n号的退出到圈外。如此循环报数,直到圈上只剩下一只猴子即当选为王。用指针(环形链表)编程。解:让指针pon指向的单元为记录类型,记录内容含有两个域: 编号变量 链指针变量 用过程crea建立环形链;用过程king进行报数处理:
18、; 每报数一次t计数累加一次,当所报次数能被n整除,就删去该指针指向的记录,将前一个记录的链指针指向下一个记录。删去的指向单元(记录)应释放。直到链指针所指向的单元是同一单元,就说明只剩下一个记录。打印指向单元记录中编号域(num)的值。program Exam521; type pon= rec; 指向rec类型
19、; rec=record rec为记录类型 num: byte; 域名n
20、um为字节类型 nxt: pon 域名nxt为pon类型 end; var hd: pon; m, n: by
21、te; procedure crea; 建立环形链 var s,p: pon; i: byte; begin new(s); hd:=
22、s; s . num :=1; p:=s; for i:=2 to n do begin new(s); s . num :=i; p . nxt:=s; p:=s end;
23、60; p . nxt :=hd end; procedure king; 报数处理 var p,q: pon; i, t: byte; begin
24、; p:=hd; t:=0; q:=p; repeat p:=q . nxt; inc(t); if t=n then begin q . nxt :=p . nxt;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮常识培训体系构建
- 口腔护理刷牙顺序规范
- 解除合伙协议协议书
- 足球发展框架协议书
- 食堂共管账户协议书
- 鲁南地质工程协议书
- 露天采矿承包协议书
- 购销合同变更协议书
- 防汛物质供货协议书
- 重庆股权转让协议书
- JJG 40-2011X射线探伤机
- GB/T 33217-2016冲压件毛刺高度
- GB/T 31765-2015高密度纤维板
- GB/T 21618-2008危险品易燃固体燃烧速率试验方法
- GB/T 19165-2003日光温室和塑料大棚结构与性能要求
- 品质管理概念培训
- 《思想道德与法治》 课件 第四章 明确价值要求 践行价值准则
- 《拟行路难》课件26张
- 西安市非学历培训机构公示表
- DB64∕T 802-2021 有限空间作业安全技术规范
- 维修记录表模板
评论
0/150
提交评论