C 雙向迴圈鍊錶(簡稱 雙鏈表)

2021-09-07 04:47:58 字數 1957 閱讀 7235

一、概念

llink -> 指向前驅結點  (前驅指標或者左鏈指標)

rlink->指向後繼結點(後驅指標或者右鏈指標)

2.雙鏈表常採用帶附加頭結點的迴圈鍊錶方式:

first:頭指標,不存放資料,或者存放特殊要求的資料。它的llink指向雙鏈表的尾結點(最後乙個結點),

它的rlink指向雙鏈表的首結點(第乙個有效結點)。鍊錶的首結點的左鏈指標llink和尾結點的右鏈指標

rlink都指向附加頭結點。

二、實現程式

1.dbllist.h

#ifndef dbllist_h

#define dbllist_h

#include using namespace std;

template struct dblnode // 建構函式

dblnode(t value, dblnode*left = null, dblnode*right = null):data(value), llink(left), rlink(right){} // 建構函式

};template class dbllist ;

template dbllist::dbllist()

first->rlink = first->llink = first; // 指向自身

}template dbllist::~dbllist()

delete first;

first = null;

}template void dbllist::createdbllist()

// 尾插入

while(current->rlink != first)

current = current->rlink; // 往後繼方向移動

newnode->rlink = current->rlink;

current->rlink = newnode;

newnode->rlink->llink = newnode;

newnode->llink = current;

current = current->rlink; // current往後移

}}template int dbllist::length()const

return count;

}template bool dbllist::isempty()

template dblnode*dbllist::gethead()const

template void dbllist::sethead(dblnode*ptr)

template dblnode*dbllist::search(const t x)

template dblnode*dbllist::locate(int i, int d)

if(current != first) // 定位成功

return current;

else

return null;

}template bool dbllist::insert(int i, const t x, int d)

if(d == 0)

else

return true;

}template bool dbllist::remove(int i, t &x, int d)

template void dbllist::output()

cout << endl;

}#endif /* dbllist_h */

2.main.cpp

#include "dbllist.h"

using namespace std;

int main(int argc, const char * argv) // switch

} // while

return 0;

}

雙鏈表 迴圈鍊錶

一 雙鏈表 對於雙鏈表,採用類似於單鏈表的型別定義,其dlinklist型別的定義如下 typedef struct dnode 宣告雙鏈表節點型別 dlinklist 1.建立雙聯表 1 頭插法 void createlistf dlinklist l,elemtype a,int n 頭插法建立...

迴圈鍊錶 迴圈雙鏈表 迴圈單鏈表

迴圈單 雙鏈表,建立 初始化 尾插 頭插 遍歷 插入 刪除 判空 部分函式採用過載 此處為c include include include using namespace std typedef struct lnodelnode,linklist typedef struct dnodednod...

雙鏈表 迴圈鍊錶 靜態鍊錶

一 雙鏈表 單鏈表有乙個大問題就是訪問後繼結點比較方便,但是如果訪問前驅結點,就需要從頭開始來一遍,時間複雜度為o n 這就很讓人不爽了,所以就有了雙鏈表。顧名思義,雙鏈表就是結點中有兩個指標prior和next,分別指向其前驅結點和後繼結點。如下圖所示 雙鏈表中結點型別的描述如下 typedef ...