C 實現的雙向迴圈鍊錶類

2021-07-16 17:17:40 字數 1753 閱讀 1561

部落格第一天

雙向鍊錶類

ccircularnode.h

class ccircularnode

~ccircularnode();

ccircularnode *getnextnode()

ccircularnode *getlastnode()

static

void initialize(ccircularnode *node)

static

bool erase(ccircularnode *node);

static ccircularnode *createobject()

bool insertbefore(ccircularnode *node);

bool insertafter(ccircularnode *node);

virtual

void destroy()

protected:

ccircularnode *lastnode, *nextnode;

};

ccircularnode.cpp

#include "ccircularnode.h"

ccircularnode::ccircularnode(ccircularnode &)

ccircularnode::~ccircularnode()

bool ccircularnode::erase(ccircularnode *node)

// 插入頭節點前

bool ccircularnode::insertheaderbefore(ccircularnode *node)

// 插入頭節點後

bool ccircularnode::insertheaderafter(ccircularnode *node)

最後 如何使用該類

自定義繼承自ccircularnode的mylistnode

該類有兩個成員變數

class mylistnode : public ccircularnode

virtual

void destroy()

int id;

char *name;

static

int count;

protected:

mylistnode():ccircularnode() {}

mylistnode(mylistnode &);

};

如何使用呢:

void usecircularlist()

//遍歷雙向迴圈鍊錶,輸出結果

printf("print list:%d ",mynode->id);

tmpnode = (mylistnode*)mynode->getnextnode();

while(tmpnode!=mynode)

printf("\n");

//釋放記憶體

tmpnode = (mylistnode*)mynode->getnextnode();

//如果mylistnode::erase返回false,說是mynode結點是該雙向迴圈鍊錶中的最後乙個結點。

while(mylistnode::erase(mynode))

mynode->destroy();

}

雙向迴圈鍊錶類C 實現。2020 11 1

記錄乙個小白的轉型之路,一轉眼又是新的一天過去了,博主今天想快速結束資料結構與演算法的線性表這一章,主要是想用c 把他們乙個個的實現起來,所以想直接將迴圈鍊錶和雙向鍊錶一起結合起來實現c 中的list容器的基本實現,emmm,這對於乙個小白還是挺煩的,倒不是說難,演算法到時很簡單,不過到了去實現的時...

C 實現雙向迴圈鍊錶

雙向迴圈鍊錶 除錯正常,所有功能均測試 節點類 template class listnode listnode type d,listnode n nullptr,listnode p nullptr data d next n prev p void setdata type d 雙向迴圈鍊錶 ...

雙向迴圈鍊錶的c 實現

雙向迴圈鍊錶,即每個節點都擁有一前一後兩個指標且頭尾互鏈的鍊錶。各種鍊錶的簡單區別如下 單向鍊錶 基本鍊錶 單向迴圈鍊錶 不同於單向鍊錶以 null 判斷鍊錶的尾部,單向迴圈鍊錶的尾部鏈結到表頭,因此當迭代操作到表頭前即是尾部 雙向鍊錶 比單向鍊錶多出指向前乙個節點的指標,但實際上使用雙向鍊錶時很少...