当前位置:实例文章 » 其他实例» [文章]08 - 线性表的类型定义 - 循环双向链表

08 - 线性表的类型定义 - 循环双向链表

发布人:shili8 发布时间:2025-01-07 20:15 阅读次数:0

**线性表的类型定义**

在计算机科学中,线性表是指一种数据结构,它的元素按照一定的顺序排列起来。线性表可以是单向链表,也可以是双向链表或循环双向链表。在本文中,我们将讨论如何定义一个循环双向链表。

**什么是循环双向链表**

循环双向链表是一种特殊的双向链表,它的最后一个元素指向第一个元素,形成一个环形结构。这种数据结构在某些应用场景下非常有用,比如说,需要快速查找和插入数据的场合。

**循环双向链表的类型定义**

我们可以使用以下C++代码来定义一个循环双向链表:

cpp// 定义一个循环双向链表结点结构体struct Node {
 int data; // 结点中的数据 Node* prev; // 前驱结点指针 Node* next; // 后继结点指针};

// 定义一个循环双向链表类class CircularDoublyLinkedList {
private:
 Node* head; // 头结点指针 int size; // 链表中的元素数量public:
 // 构造函数 CircularDoublyLinkedList() : head(nullptr), size(0) {}

 // 析构函数 ~CircularDoublyLinkedList() {
 clear();
 }

 // 清空链表 void clear() {
 while (head != nullptr) {
 Node* temp = head;
 head = head->next;
 delete temp;
 }
 size =0;
 }

 // 插入结点到头部 void insertHead(int data) {
 Node* newNode = new Node();
 newNode->data = data;
 newNode->prev = nullptr;
 if (head == nullptr) {
 head = newNode;
 newNode->next = head; // 形成环形结构 } else {
 newNode->next = head;
 head->prev = newNode;
 head = newNode;
 }
 size++;
 }

 // 插入结点到尾部 void insertTail(int data) {
 Node* newNode = new Node();
 newNode->data = data;
 newNode->next = nullptr;
 if (head == nullptr) {
 head = newNode;
 newNode->prev = head; // 形成环形结构 } else {
 Node* temp = head;
 while (temp->next != head) {
 temp = temp->next;
 }
 temp->next = newNode;
 newNode->prev = temp;
 newNode->next = head; // 形成环形结构 }
 size++;
 }

 // 删除头结点 void deleteHead() {
 if (head == nullptr) return;
 Node* temp = head;
 head = head->next;
 head->prev = nullptr;
 delete temp;
 size--;
 }

 // 删除尾结点 void deleteTail() {
 if (head == nullptr) return;
 Node* temp = head;
 while (temp->next != head) {
 temp = temp->next;
 }
 temp->prev->next = head; // 形成环形结构 delete temp;
 size--;
 }

 // 获取链表中的元素数量 int getSize() const {
 return size;
 }

 // 获取头结点的数据 int getHeadData() const {
 if (head == nullptr) return -1; // 头结点不存在 return head->data;
 }
};

**示例代码**

cppint main() {
 CircularDoublyLinkedList list;

 // 插入头结点 list.insertHead(10);
 list.insertHead(20);

 // 获取链表中的元素数量 std::cout << "链表中元素数量:" << list.getSize() << std::endl;

 // 删除头结点 list.deleteHead();

 // 获取链表中的元素数量 std::cout << "链表中元素数量:" << list.getSize() << std::endl;

 return0;
}

**注释**

* `insertHead` 和 `insertTail` 方法用于插入结点到头部和尾部。
* `deleteHead` 和 `deleteTail` 方法用于删除头结点和尾结点。
* `getSize` 方法用于获取链表中的元素数量。
* `getHeadData` 方法用于获取头结点的数据。

以上是关于循环双向链表类型定义的内容。

相关标签:
其他信息

其他资源

Top