堆資料結構的模板類 類的建立需要注意的地方

2021-08-27 18:02:34 字數 1912 閱讀 8940

完成乙個之前堆資料結構的模板類,關於類的建立需要注意的:

預設建構函式,沒有宣告編譯器會自動建立,建立類的時候呼叫預設建構函式。預設建構函式可以使帶預設引數的。

析構函式,沒有宣告編譯器會自動建立,對動態分配來說會造成記憶體洩漏等問題

複製建構函式,類作為函式引數(按值傳遞)的時候會新建臨時副本,就需要呼叫複製建構函式,之後還會呼叫析構函式,就會產生問題,複製構造會單純複製非靜態成員(也就是動態分配的指標,而不是帶內容的指標)。所以應該自己定義複製建構函式完成記憶體申請等操作。同時應該函式用引用傳遞類物件,節約呼叫建構函式與空間

賦值運算子(=)過載一下賦值運算子,否則無法進行類賦值,用過載的函式完成資料成員的記憶體申請,賦值等,然後返回乙個當前物件的引用即可

這個堆的類:類內乙個struct陣列,乙個模板data,動態分配記憶體。乙個struct裡面存1權值,用來排序,2索引,用來找模板data,因為考慮到可能資料比較複雜的話,移動資料的開銷比較大了,而改變乙個位置裡面存的索引是比較簡單。同時後來加了乙個valid的資料,用來記錄哪些位置的data是有效的,因為後面增加了刪除元素的操作,如果把後面元素前移的話就比較麻煩了,每個位置的索引都要移動,所以就加了這個valid。

#include #include using namespace std;

struct heap_struct

;template class heap_class

;template //預設建構函式

heap_class::heap_class()

template //預設析構函式

heap_class::~heap_class()

template inline int heap_class::parent(int i)//返回父節點的座標索引,陣列都是索引從0開始,

template inline int heap_class::left(int i)//返回左子節點的座標索引,陣列都是索引從0開始,

template inline int heap_class::right(int i)//返回右子節點的座標索引,陣列都是索引從0開始,

template inline void heap_class::swap(int & a,int & b)

template inline void heap_class::swap(heap_struct & a,heap_struct & b)

template void heap_class::maxheap(int i)//i是索引,對鍵值結構的處理,不涉及到資料

template type heap_class::delmaxele()//感覺可以不考慮效率的話,直接刪掉元素然後呼叫build即可,但會對除了頂層根節點以外的其他根節點進行一次判斷,但是單純只是判斷,還可以接受

{ if(len<0)

{ type tmp;

cout<<"no element"{ int index,flag=0;

for(index=0;indextest;

char c[11] = "abcdefghij";

test.insert(c[0],16);

test.insert(c[1],14);

test.insert(c[2],10);

test.insert(c[3],4);

test.insert(c[4],7);

test.insert(c[5],9);

test.insert(c[6],3);

test.insert(c[7],2);

test.insert(c[8],8);

test.insert(c[9],1);

test.showall();

char c_max = test.delmaxele();

cout<<"c_max="《半個月過去再回頭看寫出來的時候發現有很多改進的地方,以後有空再看

堆結構的C 模板類實現

資料結構中堆的概念不同於 堆疊 它是指一種完全二叉樹,這種二叉樹的任一節點的關鍵字大於 或小於 其子樹的所有節點,即最大堆 最小堆 堆結構的構建採用陣列表示,與之前的二叉樹的線性儲存結構類似,主要成員函式包括插入 刪除根節點等函式。插入數值時直接在陣列的尾端增加元素,從尾端開始往上迭代判斷是否滿足堆...

模板 資料結構 堆

heap,也就是堆,作為常用的優先佇列的替代品,其實還是有優越性的。make heap v.first v.end cmp 把容器調整成堆。push heap v.first v.end cmp 在容器本身是堆,往容器的end中插入後,把end後移,再呼叫這個。pop heap v.first v....

資料結構(七)之陣列類的建立

1.1 完成 array 類的具體實現 1.1.2 需求分析 1.1.3 array 設計要點 1.1.4 array 類的宣告 template typename t class array public object 1.2 完成 staticarray 類的具體實現 1.2.1 statica...