信息学奥赛数据结构教程PASCAL版.docVIP

  • 3
  • 0
  • 约8.17千字
  • 约 12页
  • 2019-07-10 发布于江西
  • 举报
好风光好风光恢复供货才 信息学奥赛数据结构教程PASCAL版 第三课 链表 存储方式的分类:顺序存储结构和链式存储结构; 顺序存储结构:在(子)程序的说明部分就必须加以说明,以便分配固定大小的存储单元,直到(子)程序结束,才释放空间。因此,这种存储方式又称为静态存储。所定义的变量相应的称为静态变量。它的优缺点如下:   1. 优点:可以通过一个简单的公式随机存取表中的任一元素,逻辑关系上相邻的两个元素在物理位置上也是相邻的,且很容易找到前趋与后继元素;   2. 缺点:在线性表的长度不确定时,必须分配最大存储空间,使存储空间得不 到充分利用,浪费了宝贵的存储资源;线性表的容量一经定义就难以扩充;在插入和删除线性表的元素时,需要移动大量的元素,浪费了时间; 链式存储结构:在程序的执行过程中,通过两个命令向计算机随时申请存储空间或随时释放存储空间,以达到动态管理、使用计算机的存储空间,保证存储资源的充分利用。这样的存储方式称为动态存储。所定义的变量称为动态变量。它的优点如下:   1. 优点:可以用一组任意的存储单元(这些存储单元可以是连续的,也可以不连续的)存储线性表的数据元素,这样就可以充分利用存储器的零碎空间;   2. 概念1:为了表示任意存储单元之间的逻辑关系,对于每个数据元素来说,除了要存储它本身的信息(数据域、data)外,还要存储它的直接后继元素的存储位置(指针域、link或next)。我们把这两部分信息合在一起称为一个“结点node”。   3. 概念2:N个结点链接在一起就构成了一个链表。N=0时,称为空链表。   4. 概念3:为了按照逻辑顺序对链表中的元素进行各种操作,我们需要定义一个变量用来存储整个链表的第一个结点的物理位置,这个变量称为“头指针、H或head”。也可以把头指针定义成一个结点,称为“头结点”,头结点的数据域可以不存储任何信息,也可以存储线性表的长度等附加信息,头结点的指针域(头指针)存储指向第一个结点的指针,若线性表为空表,则头结点的指针域为空(NIL)。由于最后一个元素没有后继,所以线性表中最后一个结点的指针域为空(NIL)。   5. 概念4:由于此链表中的每个结点都只包含一个指针域,故称为“线性链表或单链表”。 (一)指针类型和指针变量的说明、使用、操作 1.类型和变量的说明  type 指针类型标识符= ^基类型名; {基类型不能为文件类型}  var 指针变量名:指针类型标识符; 2.申请存储单元 {动态申请、空间大小由指针变量的基类型决定}  new(指针变量名); {PASCAL标准过程} 3.指针变量的赋值  指针变量名:=NIL; {初始化,暂时不指向任何存储单元}  如何表示和操作指针变量?不同于简单变量(如A:=0;),PASCAL规定用“指针变量名^”的形式引用指针变量(如P^:=0;)。如下图: 4.相同基类型的指针变量之间可以进行相互赋值  如有下面的程序段,可以画出右边的示意图:   var p1,p2:^integer;   new(p1);new(p2);   p1^:=90;p2^:=80;   p1:=p2; 5.关系运算  如:if p1=p2 then ……    while p nil do ……   6.释放动态存储单元   dispose(指针变量名); (二)单链表的结构、建立、输出   由于单链表的每个结点都有一个数据域和一个指针域,所以,每个结点都可以定义成一个记录。比如,有如下一个单链表,如何定义这种数据结构呢? type pointer=^nodetype;   nodetype=record     data:datatype;     next:pointer; {嵌套定义}   end; var head,p,q,r:pointer;   下面给出建立并输出单链表的程序,大家可以把它改成过程用在以后的程序当中。 Program creat; type pointer=^nodetype;   nodetype=record    data:integer;    next:pointer;   end; var  head,p,r:pointer;{r指向链表的当前最后一个结点,可以称为尾指针}  x:integer; begin  writeln(please input num(-1 is end):);  read(x);  new(head); {申请头结点}  head:=nil; {头结点初始化}  r:=head;  while x-1 do {读入的数非-1}  begin   new(p); {则,申请一个新结点}   p^.data:=x;   p^.next:=nil;   r^.n

文档评论(0)

1亿VIP精品文档

相关文档