◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎
在单链表中,只能向后操作,不能向前操作,如果从当前节点开始,则无法访问该节点前面的节点;如果最后一个节点的指针指向头节点,形成一个环,就可以从任何一个节点出发,访问所有节点,这就是循环链表。循环链表和普通链表的区别就是最后一个节点的后继指向了头节点。下面看看单链表和单向循环链表的区别。单链表如下图所示。
单向循环链表最后一个节点的next域不为空,而是指向了头节点,如下图所示。
而单链表和单向循环链表判断空表的条件也发生了变化,单链表为空表时, L ->next=NULL;单向循环链表为空表时, L ->next= L ,如下图所示。
双向循环链表除了要让最后一个节点的后继指向第1个节点,还要让头节点的前驱指向最后一个节点,如下图所示。
双向循环链表为空表时, L ->next= L ->prior= L ,如下图所示。
● 链表的优点:链表是动态存储的,不需要预先分配最大空间。进行插入、删除时不需要移动元素。
● 链表的缺点:每次都动态分配一个节点,每个节点的地址是不连续的,需要有指针域记录下一个节点的地址,指针域需要占用一个int的空间,因此存储密度低(数据所占空间/节点所占总空间)。存取元素必须从头到尾按顺序查找,属于顺序存取。