单向循环链表和 循环链表 是一样的概念和写法吗?
我看了CSDN里的帖子 感觉是一样的概念,
但是b站弹幕里有人说 单向循环链表和 循环链表 是两个不同的东西,这个弹幕错了吗?
单向循环链表和 循环链表 是一样的概念和写法吗?
我看了CSDN里的帖子 感觉是一样的概念,
但是b站弹幕里有人说 单向循环链表和 循环链表 是两个不同的东西,这个弹幕错了吗?
单向循环链表和循环链表有些不同,虽然它们都是链表的一种。
单向循环链表是一种链表,其中每个节点除了指向下一个节点之外,还指向头节点。也就是说,最后一个节点的下一个节点指向第一个节点,从而形成一个环。这个环可以通过任意一个节点进行遍历。
而循环链表是一种链表,其中最后一个节点指向第一个节点,形成一个环。循环链表不一定是单向的,也可以是双向的。
因此,单向循环链表和循环链表的概念有所不同,虽然它们都包含了环的概念。在实现上,单向循环链表和循环链表的写法也会有所不同。
以下是用C语言解释单向循环链表和循环链表的区别:
单向循环链表可以用以下的结构体来表示:
typedef struct node {
int data;
struct node* next;
} Node;
其中,data表示节点存储的数据,next指向下一个节点。
在单向循环链表中,最后一个节点的next指向第一个节点,可以通过任意一个节点进行遍历,如下图所示:
+---+ +---+ +---+ +---+
| 1 |--->| 2 |--->| 3 |--->| 1 |
+---+ +---+ +---+ +---+
而循环链表也可以用相同的结构体来表示:
typedef struct node {
int data;
struct node* next;
struct node* prev;
} Node;
其中,data表示节点存储的数据,next指向下一个节点,prev指向前一个节点。
在循环链表中,最后一个节点的next指向第一个节点,第一个节点的prev指向最后一个节点,形成一个环,可以通过任意一个节点进行遍历,如下图所示:
lua
+---+ +---+ +---+ +---+
| 1 |--->| 2 |--->| 3 |--->| 1 |
+---+<---+---+<---+---+<---+---+
因此,单向循环链表和循环链表在C语言中的表示方式是有区别的,需要根据具体情况选择相应的结构体表示。