双向循环列表建立

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:19   1569   0

参照网上的资料自己利用C++类方法进行了构造双向循环列表:


由于模板类的声明定义不能分开,否则编译器不能编译通过,所以将所有的类声明定义放到一个文件下

CDNode.h文件内容:

#pragma once

//声明一个结点的模板类,
template<class T>class CDbNode
{
public:
 CDbNode(void); 
 CDbNode(T data);
 CDbNode(CDbNode* left, CDbNode* right, T data);
 ~CDbNode(void);
 T m_data;
 CDbNode *m_left;
 CDbNode *m_right;
};


//对结点进行构造
template<class T> CDbNode<T>::CDbNode(void)
: m_data(0)
, m_left(NULL)
, m_right(NULL)
{
}

template<class T>CDbNode<T>::CDbNode(T data)
: m_data(data)
, m_left(NULL)
, m_right(NULL)
{

}
template<class T>CDbNode<T>::CDbNode(CDbNode* left, CDbNode* right, T data)
: m_data(data)
, m_left(left)
, m_right(right)
{
}
template<class T>CDbNode<T>::~CDbNode(void)
{
}





//声明链表的模板类
template<class T>class CDbList
{
public:
 CDbList(void);
 CDbList(T data);        //对链表的首结点进行了构造
 ~CDbList(void);    //利用析构对链表进行及时的删除
 CDbNode<T> *m_first;  //定义一个结点指针
 int getLen();
 int insertNode(T data);
};

template<class T>CDbList<T>::CDbList(void)
: m_first(NULL)
{
}

template<class T>CDbList<T>::CDbList(T data)
{
 m_first = new CDbNode<T>(data);
 m_first->m_left = m_first->m_right = m_first;

}

template<class T>int CDbList<T>::getLen()
{
 int nCount = 1;
 CDbNode<T> *p = m_first;
 if (p != m_first)
 {
  nCount++;
  p = p->m_left;
 }
 return nCount;
}



template<class T>int CDbList<T>::insertNode(T data)
{
 CDbNode<T> *p = m_first;
 CDbNode<T> *q = NULL;
 q = new CDbNode<T>(data);
 if (NULL == q)
 {
  return FAILE;
 }
 q->m_left = p->m_left;
 q->m_right = p;
 p->m_right->m_left = q;
 p->m_left = q;
 return SUCCESS;
}
template<class T>CDbList<T>::~CDbList(void)
{
 CDbNode<T> *p = m_first->m_left;
 CDbNode<T> *q = NULL;
 if(p != m_first)
 {
  q = p->m_right;
  delete p;
  p = q;
 }
 delete m_first;
}


其它的头文件(stdafx.h):

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
enum{
 FAILE,
 SUCCESS
};


主函数的文件内容:

#include "stdafx.h"
#include "DbNode.h"



int _tmain(int argc, _TCHAR* argv[])
{
 int a = 0;
 CDbList<int> list(1);
 list.insertNode(2);
 list.insertNode(3);
 list.insertNode(4);
 a = list.getLen();
 return 0;
}





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP