双链表C++
来源:互联网 发布:提升淘宝搜索排名 编辑:程序博客网 时间:2024/06/14 05:27
#include <iostream>using namespace std;typedef struct _node{ int data; _node* prev; _node* pnext; _node(int e, _node* p1 = nullptr, _node* p2 = nullptr) :data(e), prev(p1), pnext(p2){}}node;class doublelist{public: doublelist() :m_head(new node(-1)){ m_head->pnext = m_head; m_head->prev = m_head; } ~doublelist(){ while (m_head->pnext != m_head){ node* pmiddle = m_head->pnext; m_head->pnext = pmiddle->pnext; pmiddle->pnext->prev = m_head; delete pmiddle; } delete m_head; } bool isEmpty(){ return m_head->pnext == m_head; } int length(); void insert(int index, int e); void append(int e); void erase(int e); void remove(int index); int find(int e); int serach(int index); void replace(int olddata, int newdata); void print();private: node* m_head;};int doublelist::length(){ int length = 0; node* p = m_head; while (p->pnext != m_head){ ++length; p = p->pnext; } return length;}void doublelist::insert(int index, int e){ if (index < 0 || index > length()){ cout << "index is out of range.\n"; } else{ int i = 0; node* p = m_head; for (; i < index; ++i){ p = p->pnext; } node* pnew = new node(e); p->pnext->prev = pnew; pnew->pnext = p->pnext; pnew->prev = p; p->pnext = pnew; }}void doublelist::append(int e){ node* pnew = new node(e); node* ptail = m_head->prev; ptail->pnext = pnew; pnew->prev = ptail; pnew->pnext = m_head; m_head->prev = pnew;}void doublelist::erase(int e){ node* p = m_head; while (p->pnext != m_head){ if (p->pnext->data == e){ node* pmiddle = p->pnext; p->pnext = pmiddle->pnext; pmiddle->pnext->prev = p; delete pmiddle; } else{ p = p->pnext; } }}void doublelist::remove(int index){ if (index < 0 || index > length()-1){ cout << "index is out of range.\n"; } else{ int i = 0; node* p = m_head; for (; i < index; ++i){ p = p->pnext; } node* pmiddle = p->pnext; p->pnext = pmiddle->pnext; pmiddle->pnext->prev = p; delete pmiddle; }}int doublelist::find(int e){ int i = 0; node* p = m_head; while (p->pnext != m_head){ if (p->pnext->data == e){ return i; } ++i; p = p->pnext; } return -1;}int doublelist::serach(int index){ if (index < 0 || index > length() - 1){ cout << "index is out of range.\n"; return -1; } else{ int i = 0; node* p = m_head; for (; i < index; ++i){ p = p->pnext; } return p->pnext->data; }}void doublelist::replace(int olddata, int newdata){ node* p = m_head; while (p->pnext != m_head){ if (p->pnext->data == olddata){ p->pnext->data = newdata; } p = p->pnext; }}void doublelist::print(){ node* p = m_head; while (p->pnext != m_head){ cout << p->pnext->data << ends; p = p->pnext; } cout << endl;}int main(){ doublelist dl; for (int i = 0; i < 10; ++i){ dl.append(i); } dl.insert(1, 1); dl.print(); cout << "dl length is: " << dl.length() << endl << "8 index is: " << dl.find(8) << endl; dl.remove(8); dl.replace(1, 111); dl.print(); dl.erase(111); dl.print(); cout << "index (dl.length()-1) is: " << dl.serach(dl.length() - 1) << endl << "dl is empty : " << dl.isEmpty() << endl; return 0;}
阅读全文
0 0
- C+双链表
- 双链表(java c/c++)
- C语言实现双链表
- C实现双链表
- C实现循环双链表
- c语言实现双链表
- c语言实现双链表
- c 双链表的实现
- C语言实现双链表
- 双链表 C语言实现
- 【数据结构】双链表(c++)
- C语言实现双链表
- C语言之双链表
- 数据结构--双链表(C语言)
- C语言数据结构-双链表
- 双链表(C实现)
- C语言实现双链表
- C 循环双链表
- 初识c语言
- 知识点总结(目录)
- 关于nodejs中密码加密的处理
- python3 里面的一些特性
- Linux常用命令
- 双链表C++
- 深度学习基础与TensorFlow实战(Chapter3笔记)
- 巨人网络java笔试
- STM32的时钟系统RCC详细整理(转)
- iOS开发
- 高通CodeAurora Android开源代码下载
- 搭建ssm框架
- C、C++内存管理
- 欢迎使用CSDN-markdown编辑器