1. 程式人生 > >c++面試經典程式設計試題

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.變數的宣告和定義有什麼區別? 常量:在程式執行過程中,不會發生改變的量,不能被改變的量 變數:在程式執行過程中,可以被改變的量 定義變數的方式:資料型別