2.3.3 单链表其它算法举例 从以上对链表的各种操作的讨论可知,链式存储结构的优势在于: (1) 能有效利用存储空间; |
因为它是动态存储分配的结构,不需要预先为线性表分配足够大的空间,而是向系统"随用随取",并且在删除元素时可同时释放空间。 |
|||
(2) 用"指针"指示数据元素之间的后继关系,便于进行"插入"、"删除"等操作; |
插入或删除时只需要修改指针,而不需要进行大量元素的移动。 |
|||
而其劣势则是不能随机存取数据元素。同时,它还丢失了一些顺序表有的长处,如线性表的"表长"和数据元素在线性表中的"位序",在上述的单链表中都看不见了。又如,不便于在表尾插入元素,需遍历整个表才能找到插入的位置。 |
表长和位序是线性表中两个重要属性,在本节设置的单链表中表长是一个隐含值,必须从前到后遍历整个表才能得到。 |
|||
为了更突出链表的优势,需改进单链表结构的定义。除了保留指向头结点的指针外,还应增设"尾指针"和"表长"两个属性,同时,我们从上面讨论的链表基本操作的实现算法中可以看出,在对链表进行操作时,经常需要一个指针在链表中巡游,由此可以设想,如果将这个在操作中进行巡游的"指针"以及它所指结点的数据元素在线性表中的"位序"纳入链表结构中,作为链表定义中的两个成员,必然会对链表的操作带来很多方便。 由此,在实际使用链表时需重新考虑链表结构的定义并重新设计操作界面。详细情况将留在2.5节进行讨论。 |
如算法2.1和2.2中都需要进行"在最后一个结点之后插入元素"的操作。本来顺序表因插入元素要移动元素是个缺点,但当插入位置在表尾时不需要移动元素,所需时间是个常量,反过来,由于链表进行插入操作只需要修改指针本是个优点,然而为了查找插入位置却要遍历整个表,所需时间反而多。 |