C++实现的双向循环链表类
来源:互联网 发布:海通交易软件 编辑:程序博客网 时间:2024/05/21 20:21
博客第一天
双向链表类
CCircularNode.h
class CCircularNode{public: CCircularNode(CCircularNode &); CCircularNode() { lastNode = this; nextNode = this; } ~CCircularNode(); CCircularNode *getNextNode() { return nextNode; } CCircularNode *getLastNode() { return lastNode; } static void initialize(CCircularNode *node) { node->nextNode = node; node->lastNode = node; } static bool erase(CCircularNode *node); static CCircularNode *createObject() { return new CCircularNode(); } bool insertBefore(CCircularNode *node); bool insertAfter(CCircularNode *node); virtual void destroy() { delete this; }protected: CCircularNode *lastNode, *nextNode;};
CCircularNode.cpp
#include "CCircularNode.h"CCircularNode::CCircularNode(CCircularNode &){}CCircularNode::~CCircularNode(){}bool CCircularNode::erase(CCircularNode *node){ if (node->nextNode == node) return false; CCircularNode *last = node->lastNode; last->nextNode = node->nextNode; CCircularNode *next = node->nextNode; next->lastNode = node->lastNode; return true;}// 插入头节点前bool CCircularNode::insertHeaderBefore(CCircularNode *node){ if (lastNode == nextNode && lastNode == NULL) return false; node->lastNode = lastNode; node->nextNode = this; lastNode->nextNode = node; lastNode = node; return true;}// 插入头节点后bool CCircularNode::insertHeaderAfter(CCircularNode *node){ if( lastNode==nextNode && lastNode==NULL ) return false; node->lastNode = this; node->nextNode = nextNode; nextNode->lastNode = node; nextNode = node; return true;}
最后 如何使用该类
自定义继承自CCircularNode的MyListNode
该类有两个成员变量
class MyListNode : public CCircularNode{public: static MyListNode *createObject() { MyListNode* node = new MyListNode(); node->id = count++; node->name = new char[30]; strcpy(node->name,"MyListNode"); return node; } virtual void destroy() {// if (name) delete[] name; CCircularNode::destroy(); } int id; char *name; static int count;protected: MyListNode():CCircularNode() {} MyListNode(MyListNode &);};
如何使用呢:
void useCircularList(){ MyListNode *myNode = MyListNode::createObject(); //初始化一个双向循环链表 MyListNode::initialize(myNode); int nodeNum = 0; MyListNode *tmpNode; for (nodeNum = 0; nodeNum < 10; nodeNum ++) { tmpNode = MyListNode::createObject(); //插入头结点后部 myNode->insertHeaderAfter(tmpNode); //插入头结点前部 // myNode->insertHeaderBefore(tmpNode); } //遍历双向循环链表,输出结果 printf("Print List:%d ",myNode->id); tmpNode = (MyListNode*)myNode->getNextNode(); while(tmpNode!=myNode) {// printf("%d ",tmpNode->id); tmpNode = (MyListNode*)tmpNode->getNextNode(); } printf("\n"); //释放内存 tmpNode = (MyListNode*)myNode->getNextNode(); //如果MyListNode::erase返回false,说是myNode结点是该双向循环链表中的最后一个结点。 while(MyListNode::erase(myNode)) { myNode->destroy(); myNode = tmpNode; tmpNode = (MyListNode*)myNode->getNextNode(); } myNode->destroy();}
1 0
- [C] 双向循环链表宏实现的坑
- 双向循环链表类的C++实现
- C++实现的双向循环链表类
- 双向循环链表的C语言实现
- 双向循环链表的实现(C)
- 数据结构的C实现_双向循环链表
- c语言:双向循环链表的实现
- c语言实现的双向循环链表
- 【C++】模板实现带头节点的双向循环链表
- C语言实现双向循环链表
- c双向循环链表实现
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言实现双向循环链表
- 数据结构--双向循环链表C实现
- C语言双向循环链表实现
- C语言实现双向循环链表
- 【C++】实现双向循环链表
- (扩展)欧几里得算法、素性测试、埃式筛法、区间筛法、快速幂运算
- 个体软件过程中代码的估算、度量和错误的记录
- 一起写RPC框架(三)RPC网络模块的搭建一 网络传输模型
- HDU5834解题报告
- 设计模式C++版:第零式简单工厂
- C++实现的双向循环链表类
- 关于Docker Registry v2的搭建
- iOS开发 - KVO
- [暑假集训] jzoj 2016.8.15 noip模拟赛B 总结
- HDU 1862 EXCEL排序
- TabLayout添加图片
- 8-15ASR
- 2016.08.15【初中部 NOIP提高组 】模拟赛C
- java面试的知识点