c 面試經典程式設計試題

2021-08-27 05:21:34 字數 1920 閱讀 1366

二分查詢也是比較經典的面試題

條件:

1)資料是按從小到大或者是從大到小排序的

2)給定一組資料,在所給的排序資料中找出與資料相等的值,並返回它的下標

例子**:

#include

using namespace std;

int binary_search(int *a, int num, int

value);

/*二分查詢函式*/

int binary_search(int *a, int num, int

value)

else

if(a[mid] > value)

else

}return -1;

}/*主函式*/

解題思路

當我們到達某一結點準備調整以該結點為根結點的子樹時,先調整其左子樹將左子樹轉換成乙個排好序的左子鍊錶,再調整其右子樹轉換右子鍊錶。最近鏈結左子鍊錶的最右結點(左子樹的最大結點)、當前結點和右子鍊錶的最左結點(右子樹的最小結點)。從樹的根結點開始遞迴調整所有結點。

步驟:

1)建立二元查詢樹

2)將二元查詢樹轉換成雙向鍊錶

3)遍歷二元查詢樹

/*定義二元查詢樹節點結構*/

typedef struct _bstreenodebstreenode;

/*轉換子二叉查詢樹變成排序雙向鍊錶*/

bstreenode* convertnode(bstreenode *pnode, bool asright)

//左子樹鍊錶

bstreenode *pleft =

null;

//右子樹鍊錶

bstreenode *pright =

null;

//1. 返回左子鍊錶的最大值給當前node

if(pnode->left)

if(pleft)

//2. 返回右子鍊錶的最小值給當前node

if(pnode->right)

if(pright)

bstreenode *p_temp = pnode;

if(asright)

}else

}return p_temp;

}/*轉換二叉查詢樹變成排序雙向鍊錶*/

bstreenode* convert(bstreenode *p_headoftree)

思路:

1. 什麼是棧?

2. 回想一下棧的結構,然後再看看題目,似乎覺得還是很有難度。

經過一番苦想,思路可以是一下這種:

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...

C 經典面試題

1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...

C 經典面試題

c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...