⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 用C++实现的工资管理系统!这里用了数据结构中的链表!
💻 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 + -