雙向鍊錶的操作 模板的特化

2021-05-12 09:54:43 字數 2127 閱讀 8567

雙向鍊錶的查詢節點。

考點:雙向鍊錶的操作

出現頻率:★★★★

解析:使用right指標遍歷,直至找到資料為data的節點,如果找到節點,返回節點,否則返回null。

1       //查詢節點,成功則返回滿足條件的節點指標,否則返回null

2         dbnode *findnode(dbnode *head, int data)   //引數1是鍊錶的表頭節點

3        

10   

11              /*找到資料或者到達鍊錶末尾退出while迴圈*/

12              while (pnode->right != null && pnode->data != data)

13             

16   

17              //沒有找到資料為data的節點,返回null

18              if (pnode->right == null)

19             

2223              return pnode;

24     }

2# 發表於 2009-6-25 14:53 | 只看該作者

申請開設新版須知

解釋什麼是模板的特化(template specialization)?

考點:模板的特化的理解

出現頻率:★★★

解析:模板的特化(template specialization)分為兩類:函式模板的特化和類模板的特化。

(1)函式模板的特化:當函式模板需要對某些型別進行特別處理,稱為函式模板的特化。例如:

1       bool isequal(t t1, t t2)

2      

56       int main()

7      

**11行比較字串是否相等。由於對於傳入的引數是char *型別的,max函式模板只是簡單的比較了傳入引數的值,即兩個指標是否相等,因此這裡列印0。顯然,這與我們的初衷不符。因此,max函式模板需要對char *型別進行特別處理,即特化:

1         template <>

2       bool isequal(char* t1, char* t2)           //函式模板特化

3      

這樣,當isequal函式的引數型別為char* 時,就會呼叫isequal特化的版本,而不會再由函式模板例項化。

(2)類模板的特化:與函式模板類似,當類模板內需要對某些型別進行特別處理時,使用類模板的特化。例如:

1         template

2       class compare

3      

9       };

10   

11     int main()

12    

這裡**18行也是呼叫模板類compare的isequal進行兩個字串比較,顯然這裡存在的問題和上面函式模板中的一樣,我們需要比較兩個字串的內容,而不是僅僅比較兩個字元指標。因此,需要使用類模板的特化:

1         template<>

2       class compare//特化(char*)

3      

9       };

注意:進行類模板的特化時,需要特化所有的成員變數及成員函式。

考點:雙向鍊錶的操作

出現頻率:★★★★

解析:與測長的方法一樣,使用right指標進行遍歷。

1       //列印整個鍊錶

2       void printlist(dbnode *head)             //引數為鍊錶的表頭節點

3      

10              pnode= head;

11              while (pnode != null)

12              {

13                       printf("%d ", pnode->data);

14                       pnode = pnode->right;          //使用right指標遍歷

模板雙向鍊錶

順序表和煉表幾乎是面試必考點,前面我們已經介紹過了模板順序表 用模板寫鍊錶主要還是為了實現 的型別通用性,以下 將實現鍊錶的增 刪 查 改 判空等操作。define crt secure no warnings 1 pragma once include include using namespac...

雙向鍊錶的操作

include using namespace std 列印選項 void printtheselect typedef struct dulnode dulnode,dulinklist 初始化雙向鍊錶 void initdlist dulinklist l cout 雙向鍊錶構造完畢 n 列印雙...

雙向鍊錶的操作

摘自 雙向鍊錶是鍊錶的一種。它的每乙個結點都有兩個指標,乙個指向前乙個結點,乙個指向後乙個結點。因此可以從雙向鍊錶的任意結點開始可以很方便的訪問鍊錶的任意位置。雙向煉表示意圖 1 雙向鍊錶的刪除 2 雙向鍊錶的插入 在做刪除插入的時候,最好把圖畫出來。這樣思路就很清晰 1 package algor...