使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
来源:互联网 发布:网络黑侠不写了吗 编辑:程序博客网 时间:2024/06/16 21:46
使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
#ifndef _SINGLY_CIRCULAR_LINKED_LIST_H#define _SINGLY_CIRCULAR_LINKED_LIST_H/****************************************************************10.2-5 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH*****************************************************************/template <class T>class SinglyCircularLinkedList{public:// 一个表示链表结点的数据结构class Node{public:// 只有 StackUseSinglyLinkedList 才可以构造这个类型的对象// 访问这个类型的私有成员friend class SinglyCircularLinkedList < T > ;// 结点的值T value;private:// 默认构造函数,要求类型 T 也要有默认构造函数Node() :_next(nullptr){}// 将构造函数设置为私有的,防止在外部创建这个类型的对象Node(const T& e) :_next(nullptr), value(e){}// 指向下一个元素,如果这个值为空,// 表示本结点是链表中的最后一个元素Node* _next;};SinglyCircularLinkedList();~SinglyCircularLinkedList();// 测试链表是否为空,空链表的头结点的 _next 指向自身bool empty() const { return _head->_next == _head; }void insert(const T&);void remove(const T&);Node* search(const T&) const;void print() const;private:Node* _head;};template <class T>SinglyCircularLinkedList<T>::SinglyCircularLinkedList(){// 为头结点分配空间,初始头结点的 _next 指向自身_head = new Node();_head->_next = _head;}template <class T>typename SinglyCircularLinkedList<T>::Node* SinglyCircularLinkedList<T>::search(const T& element) const{// 从链表头开始搜索再回到链表头auto node = _head->_next;while (node != _head){if (node->value == element) return node;node = node->_next;}return nullptr;}template <class T>void SinglyCircularLinkedList<T>::insert(const T& element){// 在链表的头部插入元素,新元素指向头结点的下一个元素,头结节指向新元素// 为新元素分配空间,当从元素从链表中删除时要释放这个元素占用的空间Node* node = new Node(element);node->_next = _head->_next;_head->_next = node;}template <class T>void SinglyCircularLinkedList<T>::remove(const T& element){// 必找到目标元素的前驱结点auto node = _head->_next;auto prevNode = _head;while (node != _head){if (node->value == element){prevNode->_next = node->_next;delete node;break;}prevNode = node;node = node->_next;}}template <class T>void SinglyCircularLinkedList<T>::print() const{auto node = _head->_next;while (node != _head){std::cout << node->value << " ";node = node->_next;}std::cout << std::endl;}template <class T>SinglyCircularLinkedList<T>::~SinglyCircularLinkedList(){// 将链表中元素占用的空间释放Node* node = _head->_next;while (node != _head){Node *n = node->_next;delete node;node = n;}// 释放头结点占用的空间delete _head;};#endif
0 0
- 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
- 算法导论10.2-5 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
- 算法导论 10.2-5 环形链表实现字典操作INSERT、DELETE、SEARCH
- 10.2-5 用环形单链表来实现字典操作INSERT、DELETE和SEARCH,并给出它们的运行时间 算法导论答案
- 单向循环链表操作
- 使用C++实现的单向循环链表
- 单向链表,单向循环链表的基本操作
- Java 单向链表和单向循环链表的代码实现
- 单向循环链表的操作
- 单向循环链表的基本操作
- 单向循环链表实现约瑟夫问题
- 单向循环链表实现约瑟环问题
- 单向循环链表的C++实现
- c实现逆转单向循环链表
- C++实现单向循环链表
- 单向循环链表C语言实现
- 单向循环链表的简单实现
- 【数据结构】单向循环链表实现
- 数据共享之互斥量mutex
- strcpy和memcpy的区别
- 单 火 线 供 电
- PCB设计资料:看到最后才知道是福利
- Java 接口和抽象类区别(转)
- 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH
- CentOS配置smaba与Windows共享文件
- 从java到C++ 面向对象(一)
- Shell 符号含义 单引号 双引号 反引号
- iOS唯一标示符引导
- 数组的指针特性
- iPhone屏幕知识点解析
- facebook 分享
- LCA ing