📄 dlist.h
字号:
#ifndef DLIST_H
#define DLIST_H
template <class LDT>
class LNode
{
public:
LDT Data;
LNode * Next;
};
template <class LDT>
class DList
{
protected:
LNode<LDT> *Head;
int Count;
public:
DList()
{
Head=new LNode<LDT>;
Head->Next=0;
Count=0;
}
~DList()
{
RemoveAll();
delete Head;
}
inline void AddHead(LNode<LDT> *node)
{
node->Next=Head->Next;
Head->Next=node;
Count++;
}
inline LNode<LDT> * AddHead()
{
LNode<LDT> *node=new LNode<LDT>;
AddHead(node);
return node;
}
void AddHead(LDT data)
{
LNode<LDT> *node=AddHead();
node->Data=data;
}
void AddTail(LNode<LDT> *node)
{
LNode<LDT> *p=Head;
node->Next=0;
while(p->Next) p=p->Next;
p->Next=node;
Count++;
}
LNode<LDT> * AddTail()
{
LNode<LDT> *node=new LNode<LDT>;
node->Next=0;
LNode<LDT> *p=Head;
while(p->Next) p=p->Next;
p->Next=node;
Count++;
return node;
}
void AddTail(LDT data)
{
LNode<LDT> *node=new LNode<LDT>;
node->Next=0; node->Data=data;
LNode<LDT> *p=Head;
while(p->Next) p=p->Next;
p->Next=node;
Count++;
}
inline void InsertAt(int index,LNode<LDT> *node)
{
LNode<LDT> *p=Head;
node->Next=0;
if(index<=Count)
for(int i=0;i<index;i++) p=p->Next;
else
{
LNode<LDT> *m;
while(p->Next) p=p->Next;
for(int i=Count;i<index;i++)
{
m=new LNode<LDT>;
p->Next=m;
p=m;
Count++;
}
}
p->Next=node;
Count++;
}
LNode<LDT> * InsertAt(int index)
{
LNode<LDT> *node=new LNode<LDT>;
InsertAt(index,node);
return node;
}
void InsertAt(int index,LDT data)
{
LNode<LDT> *node=new LNode<LDT>;
node->Data=data;
InsertAt(index,node);
}
void Alloc(int count)
{
while(Count<count)
AddHead();
}
/*删除*/
void RemoveAt(int index)
{
LNode<LDT> *p=Head,*q;
for(int i=0;i<index;i++) p=p->Next;
q=p->Next; p->Next=q->Next;
delete q;
Count--;
}
inline void RemoveHead()
{
LNode<LDT> *p=Head->Next;
Head->Next=p->Next;
delete p;
Count--;
}
void RemoveTail()
{
LNode<LDT> *p=Head;
while(p->Next->Next) p=p->Next;
delete p->Next;
p->Next=0;
Count--;
}
void RemoveAll()
{
while(Count) RemoveHead();
}
/*设置/获取*/
void SetAt(int index,LDT data)
{
LNode<LDT> *p=Head;
for(int i=0;i<=index;i++) p=p->Next;
p->Data=data;
}
LDT GetAt(int index)
{
LNode<LDT> *p=Head;
for(int i=0;i<=index;i++) p=p->Next;
return p->Data;
}
LDT & operator [] (int index)
{
LNode<LDT> *p=Head;
for(int i=0;i<=index;i++) p=p->Next;
return p->Data;
}
inline LNode<LDT> * GetHeadPointer() { return Head->Next; }
inline LNode<LDT> * GetTailPointer()
{
LNode<LDT> *p=Head;
while(p->Next) p=p->Next;
return p;
}
inline LNode<LDT> * GetNextPointer(LNode<LDT> *p)
{ return p->Next; }
inline LNode<LDT> * GetPointer(int index)
{
LNode<LDT> *p=Head->Next;
for(int i=0;i<index;i++)
p=p->Next;
return p;
}
/*其它*/
int GetCount() { return Count; }
bool IsEmpty()
{
if(Count) return false;
else return true;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -