200917阶段一C++双向链表模板

一、学习的知识点

模板的继承

1类模板继承类模板

//类模板
template <class T,class T>
class CComplex
{
	public:
		CComplex();
		CComplex(T real,T1 imag);
	private:
		T real;
		T1 imag;
};

//类模板继承类模板
template <class T,class T1>
class DComplex:public CComplex<T,T1>
{
	public:
	private:
};

2类模板继承普通类

//类模板继承普通类
template <class T,class T1>
class CComplex:public Complex
{
	public:
	private:
		T a;
		T1 b;
};

3普通类继承类模板

//普通类继承类模板 基类里面的数据类型要初始化
class FComplex:public CComplex<int,double>
{
public:
private:
};

链表模板

类模板

类模板中的都是函数模板,实现前要加 template

//结点类模板的定义
template <class T>
class Node
{
public:
	Node();
	~Node();
	T pdata;
	Node<T> *pnext; //下一个结点的地址
	Node<T> *pre;  //前一个结点的地址
};
//链表类模板的定义
template <class T>
class CList
{
public:
	CList();
	~CList();
	void addNode(T pdata);
	int getCount();
	T getNode(int index); //获取结点,返回的类型为T
	int removeIndex(int index);
private:
	Node<T> *head;//链表的头结点
	int icount;//结点数
};

类模板实现

//类模板实现
template <class T>
Node<T>::Node()
{
	this->pre=NULL;
	this->pnext=NULL;
}
//构造函数模板 初始化
template <class T>
CList<T>::CList()
{
	this->head=new Node<T>;
	this->head->pre=head;
	this->head->pnext=head;
	this->icount=0;
}

添加结点

template <class T>
void CList<T>::addNode(T pdata)
{
	//第一步 创建新节点
	Node<T> *newNode=new Node<T>;
	//第二步 找尾巴结点 
	Node<T> *ptemp=head;
	while(ptemp->pnext!=head) //判断当前结点的下一个是否是头,是头结点,就找到了尾巴
	{
		ptemp=ptemp->pnext;
	}
	//加新节点
	newNode->pre=ptemp;
	newNode->pnext=head;
	newNode->pdata=pdata;
	ptemp->pnext=newNode;
	head->pre=newNode;
	this->icount++;
}

删除结点

template <class T>
int CList<T>::removeIndex(int index)
{
	Node<T> *ptemp=head;
	int icount=0;
	while(ptemp->pnext != head)
	{
		ptemp=ptemp->pnext;
		icount++;
		if(icount==index)
		{
			ptemp->pre->pnext=ptemp->pnext;
			ptemp->pnext->pre=ptemp->pre;
			delete ptemp;
			return 1;
		}
	}
	return -1;
}

二、上课没有听懂或者没有理解的地方

三、当天学习的收获

双向链表模板与其基本操作

四、作业的思路、不会的地方

参考之前的

五、其他需要反馈的问题

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页