|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
list.h
- #if !defined (LIST_H)
- #define LIST_H
- class DLink
- {
- public:
- DLink (int id)
- : _id (id)
- {
- _pPrev = this;
- _pNext = this;
- }
- DLink * Prev () const { return _pPrev; }
- DLink * Next () const { return _pNext; }
- void SetPrev (DLink* pPrev) { _pPrev = pPrev; }
- void SetNext (DLink* pNext) { _pNext = pNext; }
- int Id () const { return _id; }
- void Unlink();
- private:
- DLink * _pPrev;
- DLink * _pNext;
- int _id;
- };
- class List
- {
- public:
- List (): _pHead (0) {}
- ~List ();
- void Put ( int id );
- int Get ();
- DLink const * GetHead () const { return _pHead; }
- protected:
- DLink* _pHead;
- };
- #endif
复制代码 list.cpp
- #include "List.h"
- #include <iostream>
- #include <cassert>
- void DLink::Unlink()
- {
- assert (_pNext != 0);
- assert (_pPrev != 0);
- _pNext->SetPrev (_pPrev);
- _pPrev->SetNext (_pNext);
- _pPrev = this;
- _pNext = this;
- }
- void List::Put (int id)
- {
- DLink * pLink = new DLink (id);
- if (_pHead == 0)
- _pHead = pLink;
- else
- {
- pLink->SetNext (_pHead);
- pLink->SetPrev (_pHead->Prev ());
- _pHead->Prev ()->SetNext (pLink);
- _pHead->SetPrev (pLink);
- _pHead = pLink;
- }
- }
- int List::Get ()
- {
- assert (_pHead != 0);
- DLink * pLink = _pHead->Prev ();
- if (pLink == _pHead) // last one
- _pHead = 0;
- pLink->Unlink ();
- int result = pLink->Id ();
- delete pLink;
- return result;
- }
- List::~List ()
- {
- // free the list
- while ( _pHead != 0 )
- {
- DLink * pLink = _pHead->Prev ();
- if (pLink == _pHead)
- _pHead = 0;
- pLink->Unlink (); // unlink pLink
- delete pLink;
- }
- }
- int main ()
- {
- List list;
- list.Put (1);
- list.Put (2);
- list.Put (5);
- list.Put (3);
- std::cout << list.Get ();
- return 0;
- }
复制代码
|
|