雙向鍊錶的實現

2021-06-21 23:50:37 字數 1722 閱讀 7772

#include

template

struct snode

;template

typedef void* position;

template

class clist  

t removehead(); //刪除頭節點 返回頭節點的資料

t removetail( );//刪除尾節點 返回尾節點的資料 

void addhead( const t& data);   //頭部新增

void addtail(const t& data);   //尾部新增

void removeall( ); //全部刪除

position getheadposition( ) const  //獲取頭節點

void setat(position pos,t data) //設定當前節點的值

bool isempty( ) const //判斷鍊錶是否為空

private:

snode* m_phead;//鍊錶的頭節點

snode* m_ptail;//鍊錶的尾節點

int m_ncount;   //鍊錶節點的個數

};template

clist::clist()//初始化鍊錶

template

clist::~clist() //鍊錶清空

template

t clist::removehead()

template

t clist::removetail( )

template

void clist::addhead( const t& data)

template

void clist::addtail(const t& data)

template

void clist::removeall( )

m_ncount=0;   //把鍊錶的內容清空

m_phead=null;

m_ptail=null;

}template

t clist::getnext( position& pos)

template

t clist::getprev(position& pos)

template

void clist::removeat( position pos)

else

if(((snode*)pos)->pnext==null) //節點的後繼為空 節點為尾節點

else

delete pos;

pos=null;

m_ncount--;

}template

position clist::insertbefore(position pos, t data)

template

position clist::insertafter( position pos ,t data)

else

for(;p!=null;p=((snode*)p)->pnext)

return null;

}template

position clist::findindex( int nindex ) const

position p=m_phead;

while(nindex--)

return p;

}

雙向鍊錶實現

template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...

雙向鍊錶實現

雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...

實現雙向鍊錶

雙向鍊錶和單向鍊錶相比更加靈活,它的每乙個元素除了本身的值以為擁有兩個指標,分別指向上乙個和下乙個節點。維護成本上要高於單向鍊錶。鍊錶的大部分操作依賴於遍歷,這一方面雙向鍊錶會效率會好一些,可以根據查詢下標的位置從而選擇從煉表頭開始遍歷還是從鍊錶尾開始遍歷。返回元素個數 public intsize...