原创 內聯函數

內聯函數類似於C裏邊的宏,只是宏經常有一些不安全因素,比如 宏定義 add() 是 a+b,調用的時候宏定義直接展開,不做任何的判斷,如果調用res = add()*c; 得到的代碼就是res = a+b*c;不是想要的結果。     

原创 Treap樹的基本操作

3. Treap的操作 同其他樹形結構一樣,treap的基本操作有:查找,插入,刪除等。 3.1    查找 同其他二叉樹一樣,treap的查找過程就是二分查找的過程,複雜度爲O(lg n)。 3.2    插入 在Treap

原创 Data alignment

C語言,在對一個 struct variable使用sizeof operator(操作符)的時候,往往得到的結果並不是我們想象中——struct內所有member的size之和。 當清楚了什麼是Data alignment(數據對齊),

原创 C++函數調用詳解

一、 什麼是棧幀?     什麼是棧幀,相信很多從事C編程的童鞋還是沒有搞明白,首先引用百度百科的經典解釋:“棧幀也叫過程活動記錄,是編譯器用來實現過程/函數調用的一種數據結構。”。     實際上,可以簡單理解爲:棧幀就是存儲在

原创 第二章:拷貝構造函數

拷貝構造函數(copy constuctor) 通常C++初級程序員會認爲當一個類爲沒有定義拷貝構造函數的時候,編譯器會 爲其合成一個,答案是否定的。編譯器只有在必要的時候在合成拷貝構造函數。 那麼編譯器什麼時候合成,什麼時候不合成,

原创 AVL樹的旋轉

AVL樹的基本操作是幾種旋轉方法。 覺得這篇文章講解的很好很全面,就拿來分享了。 一、引言 由於普通二叉查找樹可能出現有極不平衡的情況,使時間複雜度最壞,於是有學者提出限制二叉查找樹各子樹的分佈,使樹形狀平衡,保證較好的查找複雜度。其中最

原创 堆和二叉查找樹的建立的時間複雜度

根據算法可以直觀的推測出他們的算法複雜度爲O(nlogn)但這並不精確。我們以下推導爲O(n) 首先關於堆 首先這個循環是從i = headsize/2 -> 1,也就是說這是一個bottom-up的建堆。於是,有1/2的元素向下比較了

原创 堆的應用

第一個是ali的面試題: 第一題是本週淘寶上有5億個商品成交數據,讓你找出銷量最高的10000個商品。 直接想起來優先隊列也就是堆。從而引出堆的一個重要的應用------大數據 【適用範圍】海量數據前n大,並且n比較小,堆可以放入內存

原创 new/delete和mallco/free的深入理解

一、基本概念      malloc/free: 1、函數原型及說明:       void *malloc(long NumBytes):該函數分配了NumBytes個字節,並返回了指向這塊內存的指針。如果分配失敗,則返回一個空

原创 關於C++中常量的理解

關於C++中常量的理解 一 常量的分類 在C++中,常量是區分類型的,從字面形式即可識別其類型。 整型常量(整數)的類型在上一節中已知道:整型數據可分爲int, short int,long int以及unsigned int, u

原创 操作系統文件管理

在現代計算機系統中,要用到大量的程序和數據,因內存容量有限,且不能長期保存,故而平時總是把它們以文件的形式存放在外存中,需要時再隨時將它們調入內存。如果由用戶直接管理外存上的文件,不僅要求用戶熟悉外存特性,瞭解各種文件的屬性,以及它們在

原创 動態規劃

動態規劃的本質不在於是遞推或是遞歸,也不需要糾結是不是內存換時間。 動態規劃是對於 某一類問題 的解決方法!!重點在於如何鑑定“某一類問題”是動態規劃可解的而不是糾結解決方法是遞歸還是遞推!怎麼鑑定dp可解的一類問題需要從計算機是怎麼工

原创 C++內存管理詳解

C++堆和棧的分配 騰訊、金山筆試常考 棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等,其操作方式類似於數據結構中的棧。 堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時

原创 程序員如何快速準備面試中的算法

程序員如何快速準備面試中的算法 前言     我決定寫篇短文,即爲此文。之所以要寫這篇文章,緣於微博上常有朋友詢問,要畢業找工作了,如何備戰算法。儘管在微博上簡單梳理過,如下圖所示:         但因字數限

原创 線性探測法構造哈希表(hash)

以下是用線性探測法構造哈希表的一個具體例子:已知一組關鍵字爲(39,49,54,38,44,28,68,12,06,77),用除餘法構造散列函數,用線性探查法解決衝突構造這組關鍵字的散列表。   解答:爲了減少衝突,通常令裝填因子α<l。