原创 【C++】預編譯、編譯、彙編、鏈接

    首先思考下面的問題:爲什麼要有編譯鏈接呢?     有兩點原因:1.編譯器無法直接運行.c和.cpp文件,因此需要將源文件轉化爲計算機可以識別的二進制文件;2.如果想要運行一段代碼,就會產生進程,進程是在內存中,而源文件存放在內存

原创 【Linux】Linux下的寫時拷貝技術(copy on write)

    在Linux程序中,fork()會產生一個和父進程完全相同的子進程,但子進程在此後多會執行exec系統調用,出於效率考慮,Linux中引入了“寫時拷貝”技術,也就是隻有進程空間的各段的內容要發生改變時,纔會將父進程的內容複製一份給

原创 【C++】函數調用堆棧

函數調用堆棧過程:     1.實參從右向左入棧,爲形參初始化;     2.將下一條指令地址入棧;     3.壓入調用方函數的棧底指針寄存器的值,即棧底地址;     4.將edp移動到被調用方棧底;     5.跳轉到被調用方函數棧

原创 【數據結構】平衡二叉樹(AVL樹)的定義、構建和插入操作

一、定義     平衡二叉樹,又稱AVL樹。它或者是一棵空樹,或者是具有下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的高度之差的絕對值不超過1。將二叉樹上的結點的平衡因子定義爲該節點的右子樹的高度減去它的左子樹的高

原创 【C++】宏、inline函數、static修飾的函數、普通函數的區別

宏和inline函數的區別     1、 宏是編譯階段處理的,純粹是字符串替換(坑確實很多,尤其是在表達式替換的時候),沒有任何的類型檢查等,十分的不安全;而 inline 函數的處理是發生在編譯階段的,有完整的語句類型檢查,比宏更安全

原创 【C++】函數調用約定、函數返回值的返回方式

C++函數調用約定有4種:     1._cdecl C標準調用約定,也是默認調用約定     2._stdcall Windows下的標準調用約定     3._fastcall 快速調用約定     4._thiscall 類成員方法

原创 【C++】同名函數的關係

    1.重載 overload:同作用域、同函數名、參數列表不同。     同函數名保證統一接口。返回值不同不能構成重載,因爲在參數列表相同的情況下,編譯器不知道調用哪一個函數。因此重載是靠形參提供支持的,包括不同的形參個數以及類型。

原创 【C++】面向過程和麪向對象思想

    一、面向過程     面向過程就是對解決問題的過程進行編程。比如我們在學習和生活中去實現某項功能或完成某項任務時,一般都會不自覺地按部就班地羅列出我們要做的事情。當我們按照羅列的步驟去解決問題時,實質上就是按照面向過程思想去解決問

原创 【C++】const用法總結

    一、C語言中     1.const修飾的是常變量,存放在代碼段,僅僅是在編譯階段看常變量是否做左值,其他處理和普通變量一樣;     2.若修飾全局變量,其屬性是global。     二、C++中     1.const修飾的

原创 【Linux】Linux下4G虛擬地址空間佈局

    32位系統下進程的虛擬地址空間大小爲4G(2^32=4G),32位是指地址總線的條數。在Windows中以2:2劃分內核、用戶空間,而在Linux中則以1:3劃分內核、用戶空間。Linux中4G虛擬地址空間分佈圖如下:    下

原创 【數據結構】二叉搜索樹(BST樹)的定義、構建、插入、刪除及查找操作

一、概念     二叉搜索樹(BST樹):又叫二叉排序樹,二叉查找樹。它或者是一棵空樹;或者是具有以下性質的二叉樹:     1.每個結點都有一個數據域,且所有節點的數據域互不相同;     2.若它的左子樹不爲空,則左子樹上的所有結點的

原创 【劍指offer】2.4.2 查找和排序

面試題11:旋轉數組的最小數字 題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的

原创 【劍指offer】2.4.1 遞歸和循環

    如果面試題要求在二維數組(可能具體表現爲迷宮或者棋盤等)上搜索路徑,那麼可以嘗試用回溯法。通常回溯法很適合用遞歸的代碼實現。只有當面試官限定不可以用遞歸實現的時候,可以在考慮用棧來模擬遞歸的過程。     如果面試題是求某個問題的

原创 【劍指offer】2.3.5 棧和隊列

面試題9:用兩個棧實現隊列 題目:用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail和deleteHead,分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。 解答:當stack2不爲空時,在stack2中的

原创 【劍指offer】2.3.4 樹

面試題7:重建二叉樹 題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如:輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,