📄 dlinktpl.h
字号:
#ifndef _DLINKTPL_H_
#define _DLINKTPL_H_
// dlinktpl.h
#include <iostream.h>
// --------------------------------------------------------------------------
template< class T >
class Node
{
public:
Node( T& rt ) : data(rt), pNext(NULL), pPrev(NULL) {}
Node* pNext;
Node* pPrev;
T& data;
};
// --------------------------------------------------------------------------
template< class T >
class DLink
{
public:
DLink();
~DLink();
public:
void Add( T& );
void Remove( T& );
public:
void PrintFList();
void PrintLList();
private:
Node<T>* pFirst;
Node<T>* pLast;
};
// --------------------------------------------------------------------------
template< class T >
DLink< T >::DLink()
{
pFirst = pLast = NULL;
}
// --------------------------------------------------------------------------
template< class T >
void DLink< T >::Add( T& t )
{
// 增加到尾部
Node<T>* temp = new Node<T>(t);
temp->pPrev = pLast;
if ( pLast )
pLast->pNext = temp;
temp->pNext = 0;
pLast = temp;
if ( pFirst == NULL )
pFirst = temp;
}
// --------------------------------------------------------------------------
template< class T >
void DLink< T >::Remove( T& t )
{
Node<T>* n = NULL;
for ( Node<T>* pF = pFirst; pF; pF = pF->pNext )
{
if ( pF->data == t )
{
n = pF;
break;
}
}
if ( n == NULL )
return;
Node<T>* pPrevS = n->pPrev;
Node<T>* pNextS = n->pNext;
if ( pPrevS )
pPrevS->pNext = pNextS;
else
pFirst = pNextS; // 删除首元素
if ( pNextS )
pNextS->pPrev = pPrevS;
else
pLast = pPrevS; // 删除尾元素
delete n;
}
// --------------------------------------------------------------------------
template< class T >
DLink< T >::~DLink()
{
if ( pFirst == NULL )
return;
Node< T >* pN = pFirst;
Node< T >* pF;
do
{
pF = pN;
pN = pF->pNext;
delete pF;
}while ( pN );
}
// --------------------------------------------------------------------------
template< class T >
void DLink< T >::PrintFList()
{
for ( Node< T >* pF = pFirst; pF; pF = pF->pNext )
cout << pF->data << "\t";
cout << endl << endl;
}
// --------------------------------------------------------------------------
template< class T >
void DLink< T >::PrintLList()
{
for ( Node< T >* pF = pLast; pF; pF = pF->pPrev )
cout << pF->data << "\t";
cout << endl << endl;
}
// --------------------------------------------------------------------------
#endif // _DLINKTPL_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -