《程式設計師面試寶典讀書筆》讀書筆記7

2021-07-11 18:44:43 字數 1782 閱讀 4650

1.變數的記憶體分配

c語言中有全域性變數,本地變數,靜態變數和暫存器變數。變數的記憶體位址分配是連續的,但是不同變數間的變數確有不同,本地變數和全域性變數分配的記憶體相差十萬八千里,而全域性和靜態變數間記憶體分配是連續的。這是因為全域性和本地變數分配在不同型別的記憶體區域的結果,對於乙個程序的記憶體空間而言,可以再邏輯上分為3個部分,**區,靜態資料區和動態資料區。動態資料區就是堆疊,堆和棧是兩種不同的動態資料快取區,棧是一種線性結構,堆是一種鏈式結構。

程式通過堆疊的基位址和偏移量來訪問本地位址。堆疊是先進後出的資料結構,所以頂位址一定小於基位址。

heap是堆,stack是棧。

stack空間由作業系統自動分配,heap由程式設計師手動分配。

stack區域有限,heap很大。

malloc和new分配的空間就對應在heap上。

程式在編譯期對變數和函式分配記憶體都在棧上進行,且程式執行過程中函式引數的傳遞也在棧上進行。

2.樹的相關知識

知道乙個二叉樹的前序序列和後序序列,不一定能夠確定它的中序序列。

先序:根節點,左子樹,右子樹。

中序:左子樹,根節點,右子樹。

後序:左子樹,右子樹,根節點。

平衡樹:平衡樹是一顆空樹或具有下列特點,它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹深度之差的絕對值不超過1。

3.排序

將輸入按關鍵字遞增或遞減的輸出。

1.快速排序法

該方法的基本思想是:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

void quick_sort(int *list,int left,int right) //l是基數

s[i]=j;

quick_sort(* list,1,i-1);

quick_sort(* list,i+1,r);

}

2.氣泡排序法

1.比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。

2.這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就「沉」到陣列第n-1個位置。

3.n=n-1,如果n不為0就重複前面二步,否則排序完成。

4.下面對其進行優化,設定乙個標誌,如果這一趟發生了交換,則為true,否則為false。明顯如果有一趟沒有發生交換,說明排序已經完成。

5.再做進一步的優化。如果有100個數的陣列,僅前面10個無序,後面90個都已排好序且都大於前面10個數字,那麼在第一趟遍歷後,最後發生交換的位置必定小於10,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從陣列頭部遍歷到這個位置就可以了。

void bubblesort(int* s,int n)

k--;

}}

3.shell排序法

該方法的基本思想是:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

《程式設計師面試寶典》讀書筆記 1

1.控制代碼和指標的區別和聯絡?控制代碼和指標是完全兩個不同的概念,控制代碼是個32bit unit,windows系統用控制代碼標記系統資源。指標只標記某個物理記憶體位址。控制代碼實際上是windows系統在記憶體維護的乙個物件記憶體實體地址列表的整數索引。因為windows系統的記憶體管理經常將...

《程式設計師面試寶典》讀書筆記 2

include int jug int x,int y else return x y int sub int x,int y void test int p int,int int x,int y vector,內部資料結構為陣列。隨機訪問每個元素所需要的時間為常量,在末尾增刪元素與元素數目無關,...

《程式設計師面試寶典》讀書筆記 4

針對繼承方面的知識點在進行簡單的總結 1.公有繼承方式 基類成員對其物件的可見性,公有成員可見而其他成員均不可見。基類成員對其派生類可見性,基類的公有成員和保護成員可見,私有不可見。基類成員對其派生類物件的可見性,基類公有成員可見。2.私有繼承方式 基類成員對其物件的可見性,公有成員可見而其他成員均...