实现单循环链表的初始化、求数据元素个数、插入、删除、取数据元素等操作;用插入法建立带头结点的单循环链表;把单链表以头文件形式保存,采用模块化程序设计方法实现单循环链表。设计一个测试主函数验证所设计单循环链表的正确性
时间: 2024-10-08 10:12:40 浏览: 37
在C++中,我们可以创建一个名为`CircularLinkedList`的类来实现单循环链表的功能。以下是基本操作的代码片段:
```cpp
#include <iostream>
// 定义链表节点结构
struct Node {
int data;
Node* next;
};
class CircularLinkedList {
private:
Node* head; // 链表头部指针
public:
// 初始化函数,设置头节点为nullptr
CircularLinkedList() : head(nullptr) {}
// 插入数据到链表尾部
void insert(int value) {
if (head == nullptr) {
head = new Node{value, head};
} else {
Node* current = head;
while (current->next != head) {
current = current->next;
}
current->next = new Node{value, head};
}
}
// 删除指定位置的数据
void deleteNode(int position) {
if (head == nullptr) return;
Node* current = head;
Node* prev = nullptr;
for (int i = 0; i < position && current != nullptr; ++i) {
prev = current;
current = current->next;
}
if (current == nullptr || current == head) return;
if (prev == nullptr) { // 如果要删除的是头节点
head = current->next;
} else {
prev->next = current->next;
}
delete current;
}
// 取数据元素并返回当前节点的值
int getData() {
if (head == nullptr) return -1; // 返回空列表错误信息
return head->data;
}
// 获取链表元素个数(考虑到是循环链表)
int size() {
int count = 0;
Node* temp = head;
do {
count++;
temp = temp->next;
} while (temp != head);
return count;
}
};
// 测试主函数
int main() {
CircularLinkedList list;
list.insert(1);
list.insert(2);
list.insert(3);
std::cout << "Size: " << list.size() << std::endl;
std::cout << "Data at position 0: " << list.getData() << std::endl;
list.deleteNode(1); // 删除第二个元素
std::cout << "Size after deletion: " << list.size() << std::endl;
return 0;
}
```
在这个例子中,我们创建了一个`CircularLinkedList`类,包含了初始化、插入、删除、获取数据元素个数以及获取特定位置元素的操作。在`main()`函数中,通过一系列操作展示了如何使用这个类。
阅读全文