数据结构(单向链表)
来源:互联网 发布:rar怎么解压到mac 编辑:程序博客网 时间:2024/03/28 23:41
#ifndef LINKLIST_H#define LINKLIST_H//链表节点template<class T>class LinkListData{public: LinkListData(T data) { this->data = data; next = nullptr; } LinkListData() { this->data = (T)0; next = nullptr; } ~LinkListData() { } LinkListData<T> *next; //下一个数据地址 //获取数据 T GetData() { return data; }public: T data; //数据};template<class T>class LinkList{public: LinkList() { m_Length = 0; m_Root = new LinkListData<T>(); } ~LinkList() { Clear(); delete m_Root; m_Root = nullptr; } //链表是否为空或NULL bool IsEmptyOrNull() { if (m_Root->next == nullptr && m_Length == 0) { return true; } else if (m_Root->next != nullptr && m_Length > 0) { return false; } else { return true; } } //链表中数据的数量 int GetLength() { return m_Length; } //查找一个数据是否在链表中 bool Contains(T data) { LinkListData<T> *cur = m_Root->next; while (cur != nullptr) { if (cur->data == data) { return true; } cur = cur->next; } return false; } //添加一个数据 int Add(T data) { if (Contains(data)) { return 0; } LinkListData<T> *addData = new LinkListData<T>(data); LinkListData<T> *cur = m_Root; while (cur->next != nullptr) { cur = cur->next; } cur->next = addData; m_Length++; } //删除一个数据 int Remove(T data) { LinkListData<T> *delData = LocateData(data); if (delData == nullptr) { return 0; } LinkListData<T> *previewData = LocatePriviewData(delData); previewData->next = delData->next; delete delData; delData = nullptr; m_Length--; } //清空 void Clear() { if (IsEmptyOrNull()) { return; } LinkListData<T> *cur = m_Root->next; while (cur != nullptr) { LinkListData<T> *delData = cur; cur = cur->next; delete delData; } m_Length = 0; m_Root->next = nullptr; } //获取索引Index的数据 LinkListData<T> *operator [](int index) { if (index < 0 || IsEmptyOrNull()) { return nullptr; } int i = 0; LinkListData<T> *cur = m_Root->next; while (cur != nullptr && i < index) { cur = cur->next; i++; } if (cur == nullptr || i > index) { return nullptr; } return cur; }protected: //查找链表元素 LinkListData<T> *LocateData(T data) { LinkListData<T> *cur = m_Root->next; while (cur != nullptr) { if (cur->data == data) { return cur; } cur = cur->next; } return nullptr; } //查找一个链表元素的前驱 LinkListData<T> *LocatePriviewData(LinkListData<T> * locateData) { if (locateData == nullptr) { return nullptr; } LinkListData<T> *cur = m_Root->next; //保存前驱 LinkListData<T> *previewData = m_Root; while (cur != nullptr) { if (cur == locateData) { return previewData; } previewData = cur; cur = cur->next; } return nullptr; }protected: //长度 int m_Length; //链表的头数据,为空则表示无数据 LinkListData<T> *m_Root;};#endif
0 0
- 数据结构(单向链表)
- 数据结构-单向链表
- 【数据结构】单向链表
- [数据结构] 单向链表
- 数据结构~~单向链表
- 数据结构单向链表
- 数据结构-单向链表
- 数据结构 单向链表
- 数据结构--单向链表
- 数据结构2 (单向链表)
- 数据结构--单向链表(c++)
- 数据结构(C语言)-单向链表
- 数据结构(三) -- 单向链表
- 数据结构与算法(单向链表)
- 【数据结构&算法】数据结构之单向链表(练习)
- 【数据结构】单向链表实例
- 数据结构之单向链表
- 数据结构之单向链表
- Android UI的有关使用
- Android Studio 升级2.3以后无法启动App的解决方案
- Telecom指令源码
- mmap
- Mac安装homebrew
- 数据结构(单向链表)
- Java学习--day1
- storm事务拓扑的理解(关于批处理word count)
- 【BZOJ2064】分裂(状压dp+奇技淫巧)
- 用javascript实现页面某个节点的拖拽
- sublime快捷键大全
- Prime Number
- Wm指令源码
- C语言合法标识符(java)