#ifndef __chain_h__
#define __chain_h__
#include using namespace std;
//vs平台下自己定義了nullptr = null = 0
//但是在gcc下沒有定義
#ifndef nullptr
#define nullptr 0
#endif
/*鍊錶的節點元素類
*/template class chainnode;/*
鍊錶類*/
template class chain
~chain(); //析構函式
bool isempty() const //判斷鍊錶是否為空
int length() const; //獲取鍊錶長度
bool find(int k, t& x) const; //獲取第k個元素
int search(const t& x) const; //在鍊錶中查詢元素x
chain& delete(int k, t& x); //從鍊錶中刪除乙個元素
chain& insert(int k, const t& x); //向鍊錶中插入乙個元素
void output(ostream& out) const; //按照鍊錶中遍歷方向輸出鍊錶元素
private:
chainnode*first; //指向第乙個結點的指標
};templatechain::~chain() //析構函式中將申請的堆空間都釋放掉
}/*獲取鍊錶的長度*/
templateint chain::length() const
return len;
}/*返回第k個元素*/
templatebool chain::find(int k, t& x) const
x = current;
return true;}/*
在鍊錶中搜尋元素x
*/templateint chain::search(const t& x) const
if (!current)
return -1;
return index;}/*
從當前鍊錶中刪除乙個元素
*/templatechain& chain::delete(int k, t& x)
k -= 2;
while(k--) //將p移動到要刪除元素的上乙個位置
chainnode*tmp = p->link; //要刪除的元素
if(!tmp->link) //如果刪除的是最後乙個元素
else
return *this;}/*
在第k個元素之後插入節點,和這個過程要分為兩種情況:
1、插入點在鍊錶的頭部,也就是k=0的位置;
2、插入點在鍊錶的中間。
*/templatechain& chain::insert(int k, const t& x)
p->link = first->link; //改變指標指向
first->link = p;
return *this;
} else
p->link = index->link; //修改指標指向
index->link = p;
return *this; }}
/*依次輸出鍊錶中的元素*/
templatevoid chain::output(ostream& out) const
out << endl;
}template ostream& operator<<(ostream& out, const chain& x)
#endif // !__chain_h__
資料結構 線性表 鍊錶實現
include include define ok 1 define error 0 typedef int status status是函式的型別,其值是函式結果狀態ok等 typedef int elemtype elemtype型別根據實際情況而定這裡設為int型 typedef struct...
資料結構 線性表 鍊錶
在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...
資料結構 線性表(順序表 鍊錶)
線性表 1 線性表是一種邏輯結構,表示一種一對一的邏輯關係,除首節點和尾節點,每個結點只有乙個前驅結點和乙個後繼結點 2 兩種實現的物理結構 順序儲存,鏈式儲存 順序表 1 定義 用一組位址連續的儲存單元,一次儲存線性表中的元素,使得邏輯位置相鄰的元素物理位置也相鄰。2 特點 順序表元素的位序從1開...