1,什么链表?
链表是数据结构中常见的数据组织方式,我们可以通过链表动态的存储数据,也就是一开始我们不必像数组那样分配一个定长的空间,可以根据需要随时扩展链表的长度,以满足数据存储的需求。链表顾名思义,数据像链子一样串起来,这个串起来的点我们叫节点(node),节点包含了数据和指向下一个节点的指针。
链表根据指针的数量以及指向的不同,分为单向列表,双向列表,单向循环列表,双向循环列表。下面我们来具体看一下,这几种链表有什么不同。
单向链表:每个节点包含一个数据项和一个指针,这个指针指向下一个节点,如果不存在下一个节点,也就是说该节点是链表的最后一个节点,那么该指针指向空。如下图所示:可以看出这个单向俩表有四个节点,每个节点的指针都指向下一个节点,最后一个节点的指针为空。用*pnext代表指向下一个节点的指针。

双向链表:每个节点包含一个数据项和两个指针,这两个指针一个指向下一个节点,另一个指向上一个节点。如果这个节点是链表的第一个节点,那么指向上一个节点的指针为空,如果这个节点是链表的最后一个节点,那么指向下一个节点的指针为空,如果该链表只有一个节点,那么指向上一个和下一个节点的指针都为空。如下图所示:我们用*pnext指向下一个节点,用*pprev指向上一个节点,这里分了两种情况,如果有多个节点,那么第一个节点的*pprev指向空,最后一个节点的*pnext指向空。如果只有一个节点,*pprev和*pnext都指向空。

单向循环链表:每个节点包含一个数据项和一个指针,这个指针指向下一个节点,如果该节点为最后一个节点,那么这个节点的指针指向第一个节点,如果该链表只有一个节点,那么该节点的指针指向自己。这个和单向列表唯一不同之处就是最后一个节点的指针指向了第一个节点,这样就形成了一个环。如下图所示:最后一个节点的*pnext指针指向第一个节点,有个特殊情况,就是单节点的时候,*pnext指针指向了自己。

双向循环链表:每个节点包含一个数据项和两个指针,一个指向下一个节点,另一个指向上一个节点,如果这个节点是链表的第一个节点,那么只指向上一个节点的指针指向最后一个节点,如果这个节点是链表的最后一个节点,那么指向下一个节点指针指向第一个节点,如果该链表只有一个节点,那么指向上一个和下一个节点的指针都指向自己。如下图所示:当多个节点的时候,第一个节点的*pprev指向了最后一个节点,最后一个节点的*pnext指向了第一个节点。当只有一个节点,指针*pprev和*pnext均指向了自己。

2,链表的代码实现:经过上面的讲解,相信大家都理解了四种链表的概念,只有完全理解了概念,才能用代码来实现它。单向链表和双向链表唯一的不同就是单向链表有一个指向下一个节点的指针,而双向链表除了有指向下一个节点的指针之外,还有一个指向上一个节点的指针。循环列表和非循环列表的区别是,最后一个节点的*pnext指针循环列表指向的是第一个节点,而非循环列表指向的是空,第一个节点的*pprev节点循环列表指向的是最后一个节点,而非循环列表指向的是空。接下来了我们依次的讲解四


6533

被折叠的 条评论
为什么被折叠?



