一、概念
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 ...