前言
链表是线性表的一种实现形式,它的核心是指针,主要特点是增加与删除不需要移动大量元素,查找某一特定元素较慢,逻辑上相邻的元素物理上不一定相邻。
链表主要分为单链表,双向链表与循环链表。每种链表又可分为带头结点的和不带头结点的。本篇主要介绍带头结点的双向循环链表的基本操作。
操作说明
Define
双向循环链表的每个结点需要有两个指针,一个指向前驱,一个指向后继。
//定义代码示例
class Node
{
public:
int data;
Node* next;
Node* prior;
public:
Node() //构造函数初始化指针数据成员
{
next = nullptr;
prior = nullptr;
data = -1;
}
};
Creat
创建双向循环链表时需要注意保证每个结点的两个指针都被赋值,且首元素的前驱指针指向尾元素,尾元素的后继指针指向首元素。
//创建代码示例
void Fill(Node *&A)
{
//输入长度
int N;
cin >> N;
//插入头结点
Node* p;
p = new Node;
p->prior = p;
p->next = p;
A = p;
Node* temp = A;
for (int i = 0; i < N; i++)
{
Node* p;
p = new Node;
p->data = rand(); //随机生成数据
temp->next = p;
A->prior = p