资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,存储空间的分配,Var,x,y:integer;Begin,x:=4;y:=5;,End.,编译时给变量分配空间,运行时给变量赋值,x,1000H,y,4000H,4,5,思考:变量,x,,,y,的关系?,存储空间的分配,Var,a:array 1.10 of integer;i:integer;,Begin,for i:=1 to 10 do,ai:=i;,End.,1000H,1002H,1004H,1006H,1008H,1010H,1012H,1014H,1016H,1018H,1,2,3,4,5,6,7,8,9,10,a,思考:数组,ai,之间的关系?,指针类型格式,:,TYPE,=,;,=,VAR,:;,或,VAR,:,;,结点类型为整型,type pointer=integer;,var,p1,p2:pointer;,结点类型为整型,var,a:real;b:,boolean,;,结点类型为记录型,type person=record,name:string10;,sex:char;,age:1.100,end;,var,p:person;,编写一个简单的指针类型的程序,Type person=record,name:string10;,sex:char;,age:1.100,end;,Var,p:person;,Begin,new(p);,p.name:=Peter;p.sex:=M;p.age:=20;,with p do,writeln,(name:10,sex:10,age:10);,dispose(p),End.,1,、开辟动态存储单元,new,过程调用的一般格式,:,new(,指针变量,),功能:开辟一个存储单元,并把此存储单元的地址赋给指针变量。,var,p:integer;,编译时给,p,分配空间,p,p,XXXX,执行,new(p),后生成新单元,新单元的地址为,XXXX,new(p);,2,、,释放动态存储单元,dispose,过程的一般格式,:,dispose(,指针变量,),功能:释放指针所指向的存储单元,使指针变量的值无定义。,dispose(p);,p:=NIL,3,、动态存储单元的引用,引用动态存储单元一般格式:,指针变量,var,p:integer;i:integer;begin,new(p);p:=4;i:=p;,编译时分配存储空间,执行,new,语句,p:=4,i:=p,?,?,p,i,?,?,p,i,?,p,?,?,p,i,4,p,?,4,p,i,4,p,program point1(input,output);,type pointer=integer;,var,a,b,c:pointer;,begin,new(a);new(b);new(c);,a:=5;b:=8;,writeln,(a=,a,b=,b),c:=a;a:=b;b:=c;,writeln,(a=,a,b=,b),end.,例,1,用指针变量交换两个变量的值,。,program ch346;,初赛篇,P157,例,46,type pointer:integer;,var,p1,p2:pointer;,begin,new(p1);,p1:=5;,p2:=p1;,new(p1);,p1:=5;,if p1=p2,then writeln(p1=p2),else writeln(p1p2),if p1=p2,then writeln(p1=p2),else writeln(p1p2),writeln,(s),end.,运行结果:,p1p2,p1=p2,单向链表,(,设输入次序为,x1,x2,xn,),先进先出队,先进后出栈,x2,head,x3,x1,x9,x10,x9,head,x8,x10,x2,x1,指针类型格式,:,TYPE,=,;,=,VAR,:;,或,VAR,:,;,单向链表定义,TYPE,point=node,node=,RECORD,data:real;,link:point,END;,VAR,head,last,next:point;x:real,;,构建链表(先进先出),Var,head,last,next:point;x:real;,Begin,read(x);,new(head);head.data:=x;,last:=head;,read(x);,while x=0 do,begin,new(next);,next.data:=x;,last.link:=next;,last:=next;,read(x),end;,last.link:=NIL,End.,输出链表,next:=head;,while nextNIL do,begin,write(next.data:6:0);,next:=next.link,end;,writeln,删除一个结点,last,next,last,next,last.link:=next.link;,dispose(next);,Procedure delete(x:real;,VAR head,:point;VAR,deleted:,boolean,);,Var,last,next:point;,Begin,next:=head;,while (next.datax)and(next.linkNIL)do,begin,last:=next;,next:=next.link;,end;,if next.data=x,then begin,deleted:=true;,if next=head,then head:=head.link,else last.link:=next.link;,dispose(next),end,else deleted:=false,End.,插入一个结点,last,next,last.link:=q;,q.link:=next;,q,last,next,插入一个结点,head,q,表头插入,next,q,表尾插入,表间插入,next,q,last,在一有序链表中插入一个新的结点,使插入以后仍然有序,。,Procedure insert(x:real;,VAR head,:point);,Var,q,last,next:point;,Begin,new(q);q.data:=x;,if xnext.data)and(next.linkNIL)do,begin,last:=next;,next:=next.link,end;,if x=0 do,begin,insert(x,head);,read(x),end,End.,栈(先进后出),1,、设栈的输入序列是(,1,、,2,、,3,、,4,),则()不可能是其出栈序列。,A.1243 B.2134 C.1432,D.4312 E.3214,指针,类型作业:,P257,11.1,11.2,11.3,
展开阅读全文