c++面試經典程式設計試題
1. 二分查詢
二分查詢也是比較經典的面試題
條件:
1)資料是按從小到大或者是從大到小排序的
2)給定一組資料,在所給的排序資料中找出與資料相等的值,並返回它的下標
例子程式碼:
#include <iostream>
using namespace std;
int binary_search(int *a, int num, int value);
/*二分查詢函式*/
int binary_search(int *a, int num, int value)
{
int start = 0;
int end = num - 1 ;
while(start <= end)
{
int mid = start + ((end - start) >> 1);
if(a[mid] < value)
{
start = mid + 1
}
else if(a[mid] > value)
{
end = mid - 1;
}
else
{
return mid;
}
}
return -1 ;
}
/*主函式*/
int main(int argc, char **argv)
{
int a[] = {1,2,3,4,5};
int num = 5;
int value = 3;
int index = binary_search(a, num, value);
printf("index = %d\n", index);
}
2. 輸入一棵二元查詢樹,將該二元查詢樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點, 只調整指標的指向
解題思路:
當我們到達某一結點準備調整以該結點為根結點的子樹時,先調整其左子樹將左子樹轉換成一個排好序的左子連結串列,再調整其右子樹轉換右子連結串列。最近連結左子連結串列的最右結點(左子樹的最大結點)、當前結點和右子連結串列的最左結點(右子樹的最小結點)。從樹的根結點開始遞迴調整所有結點。
步驟:
1)建立二元查詢樹
2)將二元查詢樹轉換成雙向連結串列
3)遍歷二元查詢樹
/*定義二元查詢樹節點結構*/
typedef struct _BSTreeNode{
int data;
struct _BSTreeNode *left;
struct _BSTreeNode *right;
}BSTreeNode;
/*轉換子二叉查詢樹變成排序雙向連結串列*/
BSTreeNode* ConvertNode(BSTreeNode *pNode, bool asRight)
{
if(pNode == NUll)
{
return;
}
//左子樹連結串列
BSTreeNode *pleft = NULL;
//右子樹連結串列
BSTreeNode *pright = NULL;
//1. 返回左子連結串列的最大值給當前node
if(pNode->left)
{
pleft = ConvertNode(pNode->left, false);
}
if(pleft)
{
pleft->right = pNode;
pNode->left = pleft;
}
//2. 返回右子連結串列的最小值給當前node
if(pNode->right)
{
pright = ConvertNode(pNode->right, true);
}
if(pright)
{
pright->left = pNode;
pNode->right = pright;
}
BSTreeNode *p_temp = pNode;
if(asRight)
{
while(p_temp->left)
{
p_temp = p_temp->left;
}
}
else
{
while(p_temp->right)
{
p_temp = p_temp->right;
}
}
return p_temp;
}
/*轉換二叉查詢樹變成排序雙向連結串列*/
BSTreeNode* Convert(BSTreeNode *p_headoftree)
{
return ConvertNode(p_headoftree, true);
}
3. 定義棧的資料結構,要求新增一個 min 函式,能夠得到棧的最小元素。要求函式 min、push 以及 pop的時間複雜度都是O(1)。
思路:
1. 什麼是棧?
2. 回想一下棧的結構,然後再看看題目,似乎覺得還是很有難度。
經過一番苦想,思路可以是一下這種:
#include <deque>
#include <assert.h>
#include <iostream>
using namespace std;
template <typename T>
class CStackWithMin
{
}
相關推薦
c++面試經典程式設計試題
1. 二分查詢 二分查詢也是比較經典的面試題 條件: 1)資料是按從小到大或者是從大到小排序的 2)給定一組資料,在所給的排序資料中找出與資料相等的值,並返回它的下
C語言經典面試題 與 C語言面試寶典
第一部分:基本概念及其它問答題 1、關鍵字static的作用是什麼? 這個簡單的問題很少有人能回答完全。在C語言中,關鍵字static有三個明顯的作用: 1). 在函式體,一個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。 2). 在模組內(但在函式體外),一個被宣告為
Mr.J--C語言經典程式設計100例
C語言,一般為初學者的首選語言,說簡單也簡單,但是要真正學好C語言,也是一件很難的事,懂了這些100個例題,也就算是入門了吧,畢竟語言要學的太多,這只是基礎。 【程式1】 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長
C語言經典程式設計282-19-直接插入排序
插入排序是直接把一個數據插入到已有的序列中 插入位置的確定:是將待插入的資料與已有序列進行比較。 #include <stdio.h> void insort(int s[],int n) { int i,j; for(i=2;i<=n;i++) //從
c++面試經典問題-四種強制型別轉換
Static_cast和Dynamic_cast放在一起比較容易記,一動一靜 Static_cast是靜態轉換,也就是編譯時轉換,可以完成基礎型別的轉換,然後任意型別指標與void指標的轉換,還可以完成同一個繼承體系中型別的轉換。 Dynamic_cast是執行時
MOOC中國大學慕課C語言期末程式設計試題
MOOC中國大學慕課C語言期末程式設計試題 1 星期推算。(20分) 題目內容:假設今天是星期日,編寫一個程式,求2018天后是星期幾。 輸出樣例:星期二 2 求和S。(20分) 題目內容:求s=1+(1+2)+…+(1+2+3+…+n)的值,其中n由鍵盤輸入。
C++面試經典總結
1. 面向物件的程式設計思想是什麼? 答:把資料結構和對資料結構進行操作的方法封裝形成一個個的物件。 2. 什麼是類? 答:把一些具有共性的物件歸類後形成一個集合,也就是所謂的類。 3. 物件都具有的兩方面特徵是什麼?分別是什麼含義? 答:物件都具有
C語言經典程式設計282例 明日科技 第243例改錯
第243例: #include<stdio.h> main() { FILE *fp;/*定義一個指向FILE型別結構體的指標變數*/ char filename1[20]
C語言經典筆試題(一)
1、請填寫bool , float, 指標變數 與“零值”比較的if 語句。 提示:這裡“零值”可以是0, 0.0 , FALSE 或者“空指標” 。例如int 變數n 與“零值”比較的if 語句為: if ( n == 0 ) if ( n
C/C++面試經典
這裡彙總一下面試的時候經常會被問到的一些問題。 1.const 有什麼用途 1:定義只讀變數,即常量 2:修飾函式的引數和函式的返回值 3: 修飾函式的定義體,這裡的函式為類的成員函式,被const修飾的成員函式代表不修改成員變數的值 2.
C語言經典程式設計題--哥德巴赫猜想 、完數 、猜數字等
一、 驗證歌德巴赫猜想:任意一個不小於6的偶數都可以表示成兩個素數的和。從鍵盤任意給一個符合條件的數,輸出相應的兩個素數。 素數:指在一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數 程式碼如下: #include <stdio.h>
Linux下C語言的幾道經典面試題
ref 使用 linu 學習資源 chan ima 什麽 img c語言 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。 1、如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麽? 答
C++ 經典面試題
sel 備份 函數地址 開發 對象 const對象 代碼 結構 函數類型 1,關於動態申請內存 答:內存分配方式三種: (1)從靜態存儲區域分配:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。 全局變量,static變量。 (2)在棧上創建:在執行
Java面試常會被問到的經典面試題,學習或者求職,你都要好好掌握
cookie 異常類 shu data 區別 origin 目的 tro jdk和jre Java現在的熱度雖然有所下降,但是,學Java的人依舊很多。。Java的崗位也是滲透很多。那麽,那些經典的Java知識點,你能看到問題就能說出一二三嗎?來一起看看。。 1.JDK和
C# .Net經典面試題目及答案
數字 空類 相同 面向連接 tab session cnblogs 一個 all 1, 請你說說.NET中類和結構的區別? 答: 結構和類具有大體的語法,但是結構受到的限制比類要多。結構不能申明有默認的構造函數,為結構的副本是又編譯器創建和銷毀的,所以不需要默認的構造函
C#經典面試題及答案
list add 字段 有一個 副本 udp 隔離性 垃圾回收 readonly 字節 1.請你說說.net 中類和結構的區別? 答:結構和類具有大體的語法,但是結構受到的限制比類多。結構不能聲明默認的的構造函數,為結構的副本是編譯器創建和銷毀的,所以不需要默認的構造函數和
C++經典面試題匯總
代碼 get child pre delet 函數調用 列表 code pub 1. 下面代碼輸出什麽?為什麽?(初始化列表) #include<iostream> using namespace std; class Test { int m_i
陣列-BAT面試經典試題:絕對眾數,零子陣列,最大子陣列和
1.絕對眾數問題 定義:給定N個數,稱出現次數最多的數為眾數:若某眾數出現的次數大於N/2,稱該眾數為絕對眾數。 如:A={1,2,1,3,2}中,1和2都是眾數,但都不是絕對眾數;A={1,2,1,3,1}中,1是絕對眾數。 已知給定的N個整數存在絕對眾數,以最低的時空負責度計算該
【筆試/面試】SQL 經典面試題
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C/C++知識點之C/C++經典面試題一
本文主要向大家介紹了 C/C++知識點之C/C++經典面試題一,通過具體的內容向大家展示,希望對大家學習C/C++知識點有所幫助。 1.變數的宣告和定義有什麼區別? 常量:在程式執行過程中,不會發生改變的量,不能被改變的量 變數:在程式執行過程中,可以被改變的量 定義變數的方式:資料型別