资源描述:
《指针链表入门(加强版)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、指针的引入数据结构分为动态数据结构和静态数据结构,在实际的编程过程中,经常会遇到这种问题:我们不能确定操作的数据的个数。如果用数组太大,会超内存,反之可能不够用。如果随着数据的增多,有一•种数据结构随着内存变大,就可以解决这种问题,这种数据结构就是动态数据结构。一个动态数据结构是元素(或结点)的汇集。与数组不同,它不需要包括存储固定数冃的存储空间,而是在程序执行时随着数据的需要而扩充或缩减。讨论动态数据结构,就要讨论与Z相关的--种静态数据结构指针。指针的实质指针就是'地址',指针存储的变量就是指针变量。指针变量单元中存放的是某种数据变量单元的地址,通过这个地址可
2、以找到这种类型的数据。我们所关心的是指针指向的一个什么样的数据,即数据的基类型是什么。指针的应用一、定义:1.typerec=Ainteger;vari,j:rec;2.vari,j:Ainteger;二、使用1.开辟new(i);功能:系统将H动分配一个存放数据的存储单元,并把存储单元的地址赋给指针变量i,此单位能存放的数据的类型止好是i的基类型,存储单元的人小由数据的基类型决定。2.释放dispose(i);功能:为了节省空间,对于一些己经不需要的动态变量单元,系统能通过dispose收回。3.赋值iA:=jA;功能:给指针变量赋值,正是我们所需要的数据。注:
3、i:=j;赋值给i的是j的地址,i的地址会变成j的地址,即两个指针变量的地址和同,同时指向一个数据;iA:=jA;赋值给i的是j的数值,i的地址并未改变。三、使用样例输入两个整数,按照从小到人打印出来。programtaxis;typepointer=Ainteger;varp,q:pointer;procedureswap(varh,r:pointcr);vart:pointer;beginend;beginnew(p);ncw(q);readln(pA,qA);ifpA>qAthenswap(p,q);writeln(pA;qA);dispose(p);di
4、sposc(q);end.{口己通过freepascal编译运行的)链表设乂一•批数{1,2,12,45,6,12,4,1,65,……},如何存放呢?我们当然会选择以询学的,数组,但是如果不知道乂多少的数据呢?那就得开一个足够人的数组,但是如呆数据量很大呢?这种数据结构缺乏灵活性,往往会浪费很多空间,这就是静态数据结构。木文将介绍一•种简单实用的数据结构——链表。链表的定义typepointcr=Arcc;rec=recorddata:longint;ncxt:pointcr;end;varpl,p2:pointer;ncw(pl);ncw(p2);plA.dat
5、a:=10;plA.next:=p2;通过这样的-•种递归建立联系。建立链表笫一步:申请新节点;第二步:给结点的数据域和指针域赋值;第三步:将结点链接到表屮的某一位置。例题:建立i个有十个结点的链表,最后输出该链表。Programcreatable(input,output);TypePointer=Arec;Rcc=rccordData:string[5];Next:pointer;End;VarPl,p2,h:pointcr;Linteger;BeginNew(pl);Readin(plA.data);H:=pl;ForI:=lto9doBeginNew(p2
6、);Readln(p2A.data);Pl.next:二p2;Pl:=p2;End;P2.next:=nil;Pl:=h;WhileplonildoBeginWrite(plA.data/');Pl:=pl.ncxt;End;End.解释:在输出链表时,将h作为pl的初值,输出pl所指向的结点的数据域,然后将pl指针移向下一个结点,再输出,知道pl是nil。这个过程就是链表的遍历。常见的链表模型1.先进先出链表(队)2.先进后出链表(栈)例题:读入一批数据,遇到负数就停止,将读入的正数组成先进先出链农并输出。typepointer=Arec;rec=recordd
7、ata:intcgcr;next:pointer;end;varpl,p2,h:pointer;x:intcgcr;beginread(x);ifx>=0thenbeginncw(pl);plA.data:=x;end;h:=pl;read(x);whilex>0dobeginnew(p2);p2A.data:=x;plA.next:=p2;pl:=p2;read(x);end;pl:=h;whileplonildobeginwriteln(plA.data);pl:=plA.next;end;end.{自己写的,经过cena测评}例题:与上题相同,将读入的正数组
8、成先进后出