原创 每天學習一算法系列(34)(求一個二叉樹中任意兩個節點間的最大距離,兩個節點的距離的定義是這兩個節點間邊的個數)

 題目: 求一個二叉樹中任意兩個節點間的最大距離,兩個節點的距離的定義是這兩個節點間邊的個數,比如某個孩子節點和父節點間的距離是1,和相鄰兄弟節點間的距離是2, 優化時間空間雜度。   思路一: 計算一個二叉樹的最大距離有兩個情況: 情況

原创 每天學習一算法系列(25)(一個臺階總共有n 級,如果一次可以跳1 級,也可以跳2 級,求總共有多少總跳法,並分析算法的時間複雜度。)

題目: 一個臺階總共有n 級,如果一次可以跳1 級,也可以跳2 級,求總共有多少總跳法,並分析算法的時間複雜度。 注:這道題最近經常出現,包括MicroStrategy 等比較重視算法的公司都曾先後選用過個這道題作爲面試題或者筆試題。  

原创 每天學習一算法系列(28)(輸入一個整數n,求從1 到n 這n 個整數的十進制表示中1 出現的次數)

題目: 輸入一個整數n,求從1 到n 這n 個整數的十進制表示中1 出現的次數。 例如輸入12,從1 到12 這些整數中包含1 的數字有1,10,11 和12,1 一共出現了5 次。注:這是一道廣爲流傳的google 面試題。   思路一

原创 Calling Convention

 1.Background 在C語言中,假設我們有這樣的一個函數: int function(int a,int b) 調用時只要用result = function(1,2)這樣的方式就可以使用這個函數。但是,當高級語言被編譯成計算機可

原创 Yacc介紹與使用

 概念 •什麼是YACC? yacc(Yet Another Compiler Compiler),是Unix/Linux上一個用來生成編譯器的編譯器(編譯器代碼生成器). 使用巴克斯範式(BNF)定義語法,能處理上下文無關文法(c

原创 在VC6.0/VC2008中高效地使用flex & bison

由於 目前的主要工作是IDE,而IDE中主要負責Compiler & Assembler部分,這兩部分中都會用到flex & bison(Lex & Yacc),所以通常的做法是在相應工程目錄(如:工程爲SDCC Compiler)下建立

原创 在VC2008上Build SDCC Compiler

If you want to build SDCC on Visual Studio 2008, there're some prerequisites. 1. No empty space in the

原创 C++中RTTI的編碼實現

摘要:   RTTI(Run-Time Type Identification)是面向對象程序設計中一種重要的技術。現行的C++標準對RTTI已經有了明確的支持。不過在某些情況下出於特殊的開發需要,我們需要自己編碼來實現。本文介紹了一些

原创 構造函數中拋出的異常

 構造函數中拋出的異常   1、標準C++中定義構造函數是一個對象構建自己,分配所需資源的地方,一旦構造函數執行完畢,則表明這個對象已經誕生了,有自己的行爲和內部的運行狀態,之後還有對象的消亡過程(析構函數的執行)。可誰能保證對象的構造

原创 在Visual C++2008中調用GCC/G++編譯單文件

在VC2008中,如何編譯單文件呢? 除了用cl.exe命令行方式外,能否在IDE中實現? 這裏有一個技巧: 在VC2008中不能編譯單個cpp文件,必須把它放在工程中。但是,我們可以通過調用外部工具實現編譯單文件。下面以調用GCC/G

原创 #pragma init_seg使特定的全局變量優先於其他的全局變量先構造

 我們知道在C++中的全局變量的構造總是優先於Main之前(應該說程序的執行體),那對於同一個文件,不同文件中定義的全局變量的構造函數是怎麼執行的呢? 1)對於同一個文件來說:全局變量的構造順序按照全局變量的聲明來構造。 如: C_C g

原创 爲什麼EXE不能超過4GB

//原文來自於:http://www.cnblogs.com/lixiong/archive/2010/07/13/1776284.html 爲什麼EXE不能超過4GB 前幾天看到大家在討論EXE裝載的問題,很新奇。有的說PE裝載受到進

原创 Try Me Mode & Normal Mode

     目前市場上賣的玩具的類型很多,顧客去商場要購買玩具的時候,顧客可能會看到有的玩具可以隨便試玩,功能全部裸露出來,但是有的遊戲全部包裝起來不能讓顧客隨意玩,顧客只有買回去把包裝卸掉才能玩,對應我們顧客來說比較偏向可以隨意玩的玩具,

原创 關於“邏輯地址”、“線性地址”和“物理地址”

 實模式下: 一個地址(即物理地址)由“段值:偏移”確定。“段值”爲16位的cs、ds等段寄存器,“偏移”可由16位的寄存器或常數(符號標識)給出。物理地址的計算公式爲:         物理地址(Phy

原创 如何確定一個機器的字節順序是大端還是小端

什麼是大/小端呢?所謂大端就是指高位值在內存中放低位地址,所謂小端是指低位值在內存中放低位地址。比如0x11223344在大端機上是11223344,在小端機上是44332211,而一個機器是大端還是小端要看cpu類型以及運行在上面的操作