【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++ 中的链表数据结构。