📄 list.h
字号:
//List.h
class CData //定义数据基类
{
public:
CData(){}
virtual int Compare(CData &)=0;
virtual void Show()=0;
virtual ~CData(){};
};
class CNode //定义结点类
{
private:
CData *pData; //用于指向数据类的指针
CNode *pNext; //指向链表的后项指针
public:
CNode(){ pData=0;pNext=0;} //结点构造函数
CNode(CNode &node) //用于拷贝的构造函数
{
pData=node.pData;
pNext=node.pNext;
}
void InputData(CData *pdata){pData=pdata;} //输入数据
void ShowNode(){pData->Show();}
CData *GetData(){return pData;}
friend class CList; //定义链表类为友员
friend class CListSuper;
};
class CList //定义链表类
{
protected:
CNode *pHead; //链表头结点指针
public:
CList(){pHead=0;}
~CList(){DeleteList();}
void AddNode(CNode *pnode); //在首部舔加结点
CNode *DeleteNode(CNode *); //删除一个指定的结点,返回该结点的指针
CNode *LookUp(CData &);
void ShowList();
void DeleteList();
CNode *GetListHead(){return pHead;}
CNode *GetListNextNode(CNode *);
};
CNode *CList::GetListNextNode(CNode *pnode)
{
CNode *p1=pnode;
return p1->pNext;
}
void CList::AddNode(CNode *pnode)
{
if(pHead==0)
{
pHead=pnode;
pnode->pNext=0;
return;
}
else
{
pnode->pNext=pHead;
pHead=pnode;
}
}
CNode * CList::DeleteNode(CNode * pnode)
{
CNode *p1,*p2;
p1=pHead; //指向首结点
while(p1!=pnode&&p1->pNext!=0) //寻找要删除的结点
{
p2=p1; //结点P2始终在P1的后面
p1=p1->pNext;
}
if(p1==pHead) //如果要删除的是首结点
{
pHead=pHead->pNext; //将首结点后移
return pnode;
}
p2->pNext=p1->pNext; //P1指向被删除的结点,将P2结点与P1后面的结点连接起来
return pnode;
}
CNode * CList::LookUp(CData &data) //查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找到返回0
{
CNode * p1=pHead;
while(p1) //从头结点开始查找
{
if(p1->pData->Compare(data)==0)
return p1; //找到后返回结点指针
p1=p1->pNext;
}
return 0;
}
void CList::ShowList() //打印整个链表数据
{
CNode *p1=pHead;
while(p1)
{
p1->pData->Show();
p1=p1->pNext;
}
}
void CList::DeleteList() //删除整个链表结点
{
CNode *p1,*p2;
p1=pHead;
while(p1)
{
delete p1->pData;
p2=p1;
p1=p1->pNext;
delete p2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -