C 模板實現鍊錶佇列

2021-07-29 06:57:33 字數 1887 閱讀 6382

佇列是一種十分常見的資料結構,具有先進先出的特點.佇列在處理訊息時,非常常用.本文利用c++,模板,鍊錶來實現乙個簡單的佇列.

**解讀如下:

1. queuelinklist標頭檔案. queuelinklist私有繼承於linklist,因為做為佇列中的核心鍊錶資料結構,我們只希望其具有尾插入,頭取出的方法. 採用private繼承可以很好的保證父類中的普通鍊錶的一些方法對外不可見.同時,增加尾指標,方便尾操作.

2. isempty(), isfull()方法仍然需要對外可見. 但private繼承使得他們不可見,這裡採用重新定義這兩個函式來實現.c++中,子類如果與父類有同樣的函式,該函式在父類中沒有定義為virtual,則父類該函式被隱藏.不過我們可以在子類中使用作用域運算子來明確指出呼叫父類的對應方法. 這個使用在後面的.cpp檔案中有用到.

3. 析構函式呼叫的順序. 在測試**中,當呼叫到delete linkqueue時,首先會觸發linkqueue的析構函式,linkqueue的析構函式中會釋放queuelinklist,這將觸發queuelinklist的析構函式呼叫,由於queuelinklist是linklist的子類,所以之後會觸發linklist的析構函式的呼叫.在記憶體釋放的時候要特別小心,對每個指標判斷null,否則容易造成重複釋放記憶體而導致程式崩潰.

4. 測試**對該佇列進行了1000*100000共計10億次進出操作,可以看到記憶體使用在一定範圍內波動(入佇列記憶體占用增加,出佇列記憶體占用降低),最終全部釋放掉,沒有記憶體洩露發生.

;對應的原始檔如下:

template

template

int capacity>

linkqueue::linkqueue()

}template

int capacity>

linkqueue::~linkqueue()

}else

}if (null != linklist)

}}template

int capacity>

bool linkqueue::isempty()

template

int capacity>

bool linkqueue::isfull()

template

int capacity>

bool linkqueue::enqueue(t data)

else

return rs;

}template

int capacity>

bool linkqueue::dequeue(t& data)

else

return rs;

}

最後,附上測試**:

void testlinkqueue()

linkqueue->enqueue(i);

//cout << i << endl;

i++;

//_sleep(10000);

//while (i > 10000)

////}

}delete linkqueue;

linkqueue = null;}}

C 模板實現佇列

我準備練習一下模板的知識,然後自己實現vector類。在這之前,先用模板實現乙個佇列來熱身吧。佇列的底層是鍊錶。主要是熟悉一下模板的寫法。另外,就是模板的定義和實現都要寫在乙個檔案中 export關鍵字可以避免這樣。還沒用過 所以倒數第二行我加了個 include queue.hpp 只能是hpp,...

C 模板實現順序表和煉表

順序表 pragma once include include include using namespace std 模板實現順序表 考慮深層次的深淺拷貝問題 template class seqlist t operator size t pos void print private t a s...

C 利用模板實現佇列

這個 的實現主要使用了類模板以及模板函式,友元,成員模板以及成員模板函式。這裡需要注意的時,類的成員函式在實現的時候必須滿足以下幾點 1 必須以template開始,後接模板形參表 2 必須指出是那個類成員 3 類名必須包含模板形參 具體的格式如下 templatereturn type queue...