规定工作人员的编号从1000~9999,第一个元素的关键字为1,这个元素用来指向第一个工作人员的入口,它是不允许删除的;末元素的关键字定为10000,这是一个结束标志,末元素也是不允许删除的。除两头外,链表的中间元素就是以编号上升的次序来排列的,显然它占有的存储区并不是顺序排列的。每个元素中的第二个字段为信息字段,它占有三个字的存储空间,用来保存每个工作人员记录在磁盘中存放的地址。所以,根据给定的工作人员的编号(关键字)找到该元素后,就可以从信息字段取得该工作人员在磁盘中记录的地址而取得这一记录。元素中的第三个字段即链表结构所需要的指针字段,它占有一个字,用来链接下一元素。在这个例子中,我们使用相对于目录首地址的位移量作为指针值,以便用基址变址寻址方式就可以方便地找到各元素。
采用有序链表结构对插入或删除元素的操作是很有利的,动画表示了链表结构中插入和删除一个元素的操作情况。
动画一中要求插入编号为5082的新元素,如原来链表中编号为5008的元素直接链向编号为5146的元素,现在要在其间插入编号为5082的元素,只要把原来的链接删除(如虚线所示),再建立新的链接(如实线所示)就可以了。实际的操作是:把5008元素的指针字段从原来的4320改为4590,把5082元素的指针字段填入4320即可。动画二中要求删除编号为5006的元素,也只需要把原来指向该元素的指针从原来的3830改为被删除元素的指针字段的值3010就可以了。
从这里可以看出有序链表结构的优点是:它不需要像有序数组中插入或删除一个元素时需要移动其他元素的位置,只需要重新建立新的链接就可以了。
再强调一下,这里的次序是按关键字排列的,而不是按存储单元的地址排列的,关键字的大小与存储单元的地址是无关的。
|