📄 llist.h
字号:
//--------------------------//
// //
// 链表类 //
// //
//--------------------------//
#if !defined(_INC_LLIST_OO)
#define _INC_LLIST_OO
#include<stdlib.h>
#include "D:\vc_h_file\Node.h"
template<class T>
class CLList
{
private:
CNode<T> *front;//表头指针
int size;//表长度
public:
CLList();
~CLList();
int Size();const//表长
int Empty();const//判断表是否为空
int Locate(T item);const//定位表项
T GetData(int pos);const//取表项
void SetData(T item,int pos);//修改表项
void Insert(T item,int pos);//插入表项
void Delete(int pos);//删除表项
void Clear();//置空表
};
template<class T>
CLList<T>::CLList()
{
front=new CNode<T>;
if(front==NULL)
{
cerr<<"overflow\n"<<endl;
exit(1);
}
front->SetNextNode(NULL);
size=0;
}
template<class T>
CLList<T>::~CLList()
{
while(front->GetNextNode()!=NULL)
front->DeleteAfter();
delete front;
}
template<class T>
int CLList<T>::Size()const
{
return(size);
}
template<class T>
int CLList<T>::Empty()const
{
if(size==0)
return(1);
else
return(0);
}
template<class T>
int CLList<T>::Locate(T item)const
{
int i;
CNode<T> *ptr;
ptr=front->GetNextNode();
for(i=0;ptr!=NULL;i++)
{
if(item==ptr->GetData())
return(i);
ptr=ptr->GetNextNode();
}
return(-1);
}
template<class T>
T CLList<T>::GetData(int pos)const
{
int i;
CNode<T> *ptr;
if(pos<0||pos>size-1)
{
cerr<<"Pos is illegal in GetData!\n"<<endl;
exit(1);
}
ptr=front->GetNextNode();
i=0;
while(i<pos)
{
ptr=ptr->GetNextNode();
i++;
}
return(ptr->GetData());
}
template<class T>
void CLList<T>::SetData(T item,int pos)
{
int i;
CNode<T> *ptr;
if(pos<0||pos>size-1)
{
cerr<<"Pos is illegal in GetData!\n"<<endl;
exit(1);
}
ptr=GetNextNode(front);
for(i=0;i<pos;i++)
ptr=ptr->GetNextNode();
ptr->SetData(item);
}
template<class T>
void CLList<T>::Insert(T item,int pos)
{
int i;
CNode<T> *prevptr,*ptr;
if(pos<0||pos>size)
{
cerr<<"Pos is illegal in Insert!\n"<<endl;
exit(1);
}
prevptr=front;
ptr=front->GetNextNode();
for(i=0;i<pos;i++)
{
prevptr=ptr;
ptr=ptr->GetNextNode();
}
prevptr->InsertAfter(item);
size++;
}
template<class T>
void CLList<T>::Delete(int pos)
{
int i;
CNode<T> *prevptr,*ptr;
if(pos<0||pos>size-1)
{
cerr<<"Pos is illegal in LDelete!\n"<<endl;
exit(1);
}
prevptr=front;
ptr=front->GetNextNode();
for(i=0;i<pos;i++)
{
prevptr=ptr;
ptr=ptr->GetNextNode();
}
prevptr->DeleteAfter();
size--;
}
template<class T>
void CLList<T>::Clear()
{
while(front->GetNextNode()!=NULL)
front->DeleteAfter();
size=0;
}
#endif //_INC_LLIST_OO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -