看的概念挺朦朧的,沒有明確好雙鏈表到底需要哪些方法,其實針對這種結構應該可以寫很多方法,並沒有什麼特定標準。
不過真是只看不練不行啊,一下手各種錯誤,各種溢位
#include
using namespace std;
templatestruct node
;templateclass flist
;templateflist::flist():count(0),front(0),end(0) //初始化順序與類中宣告有關與這無關
templateflist::~flist()
temp = null;
}templatebool flist::isempty() const
templateint flist::listsize() const
templateflist::flist(const flist& c_list)
templatet& flist::listfront() const
templatet& flist::listend() const
templatevoid flist::push_front(t n)
templatevoid flist::push_back(t n)
templatevoid flist::del_front()
templatevoid flist::del_back()
templatet flist::showkey(int n)
*/if ((front !=0) && (n <=count) && (n >= 1))
return temp->value;
//這裡temp指向了乙個也有其他指標指向節點,可不要delete }}
templatevoid flist::deeply_copy(const flist& copylist)
end = np;
}int main()
;for (int i = 0 ; i < 5 ; i++)
listf.push_front(a[i]);
cout << "lisrfsize: " << listf.listsize() << endl;
for (int i = 0 ; i < 5 ; i++)
listf.push_back(a[i]);
cout << "lisrfsize: " << listf.listsize() << endl;
cout << "listf is empty? : " << listf.isempty() << endl;
flistlistf2(listf);
cout << "listf2size : " << listf2.listsize() << endl;
listf2.del_front();
listf2.del_back();
cout << "listf2 front :" << listf2.listfront() << endl;
cout << "listf2 end :" << listf2.listend() << endl;
cout << "listf2 size :" << listf2.listsize() << endl;
for (int i = 1; i <= listf2.listsize(); i++)
cout << listf2.showkey(i) << endl;
return 0;
}
演算法導論第十章 基本資料結構
集合 如同在數學中一樣,集合也是電腦科學的基礎。不過數學上的集合時不變的,而演算法所操作的集合是動態改變的。資料結構這一部分介紹在計算機中表示和操作有窮動態集合的一些基本技術。字典 許多演算法要求能夠將元素插入集合,從集合中刪除元素,以及測試元素是否屬於集合。支援這些操作的動態集合就叫字典。另一些演...
第十章 基本資料結構 鍊錶
鍊錶 鍊錶與陣列的區別是鍊錶中的元素順序是有各物件中的指標決定的,相鄰元素之間在物理記憶體上不一定相鄰。採用鍊錶可以靈活地表示動態集合。鍊錶有單鏈表和雙鏈表及迴圈鍊錶。書中著重介紹了雙鏈表的概念及操作,雙鏈表l的每乙個元素是乙個物件,每個物件包含乙個關鍵字和兩個指標 next和prev。鍊錶的操作包...
演算法導論第十章 基本資料結構(一)
棧和佇列是動態集合 棧實現的是一種後進先出 lifo,last in first out 佇列實現的是一種先進先出 fifo 棧 stack 棧的操作有兩個,乙個是壓入 push 乙個是彈出 pop 對空棧執行pop操作,會導致乙個錯誤 棧下溢 underflow 如果棧頂元素超出棧的大小,那麼則導...