当前位置:实例文章 » 其他实例» [文章]【STL】模拟实现简易 list

【STL】模拟实现简易 list

发布人:shili8 发布时间:2025-02-11 09:28 阅读次数:0

**模拟实现简易 List**

在 C++ 中,`std::list` 是一种双向链表,它提供了高效的插入、删除和查找操作。然而,在某些情况下,我们可能需要自己实现一个简易的 List 类来满足特定的需求。在本文中,我们将模拟实现一个简易的 List 类,包括基本的构造函数、析构函数、插入、删除和查找等功能。

###1. 简易 List 的定义

cpp// 简易 List 的定义template <typename T>
class SimpleList {
public:
 // 构造函数 SimpleList() : head_(nullptr), tail_(nullptr) {}

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

 // 插入元素到头部 void push_front(const T& value) {
 Node* node = new Node(value);
 if (head_ == nullptr) {
 head_ = tail_ = node;
 } else {
 node->next_ = head_;
 head_->prev_ = node;
 head_ = node;
 }
 }

 // 插入元素到尾部 void push_back(const T& value) {
 Node* node = new Node(value);
 if (head_ == nullptr) {
 head_ = tail_ = node;
 } else {
 node->prev_ = tail_;
 tail_->next_ = node;
 tail_ = node;
 }
 }

 // 删除头部元素 void pop_front() {
 if (head_ != nullptr) {
 Node* node = head_;
 head_ = head_->next_;
 if (head_ != nullptr) {
 head_->prev_ = nullptr;
 } else {
 tail_ = nullptr;
 }
 delete node;
 }
 }

 // 删除尾部元素 void pop_back() {
 if (tail_ != nullptr) {
 Node* node = tail_;
 tail_ = tail_->prev_;
 if (tail_ != nullptr) {
 tail_->next_ = nullptr;
 } else {
 head_ = nullptr;
 }
 delete node;
 }
 }

 // 查找元素 bool find(const T& value, Node*& node) const {
 node = head_;
 while (node != nullptr && node->value_ != value) {
 node = node->next_;
 }
 return node != nullptr;
 }

private:
 struct Node {
 T value_;
 Node* next_;
 Node* prev_;

 Node(const T& value) : value_(value), next_(nullptr), prev_(nullptr) {}
 };

 Node* head_;
 Node* tail_;
};


###2. 使用示例
cppint main() {
 SimpleList<int> list;

 // 插入元素到头部和尾部 list.push_front(1);
 list.push_back(2);

 // 删除头部和尾部元素 list.pop_front();
 list.pop_back();

 // 查找元素 Node* node;
 if (list.find(3, node)) {
 std::cout << "找到元素3" << std::endl;
 } else {
 std::cout << "未找到元素3" << std::endl;
 }

 return0;
}


###3. 总结在本文中,我们模拟实现了一个简易的 List 类,包括基本的构造函数、析构函数、插入、删除和查找等功能。这个类可以用于学习和理解 C++ 中的链表数据结构。

其他信息

其他资源

Top