程式設計 微知識(十一) 鏈結串列(Linked List) part1

一般在儲存同型態的資料時,使用陣列是一個直觀且簡單的方法,只要宣告陣列空間大小,就可以直接使用。但是在資料不多(陣列空間比資料大小多)的時候很容易造成記憶體的浪費。或是資料比較多(陣列空間比資料大小少)的時候也會造成記憶體空間上的使用限制。

而link list則是有多少資料就用多少記憶體空間,有新資料加入的話在項系統要一塊記憶體空間,資料刪除後就把空間還給系統,和靜態資料結構陣列型態不同之處就是link list使用動態記憶體配置來存放資料。也可以說link list是為了解陣列的那些缺陷而出現的

list中的每一個元素稱為節點(NODE),每一個節點都包含了儲存資料的變數以及連結其他節點的鏈結指標。

本文以C++實作介紹。

...繼續閱讀 »

程式設計 微知識(十) 雙重指標介紹

指標(Pointer)

是一種變數,用來儲存記憶體位置,儲存在記憶體中的可能是字元或是整數或是指標本身變數的位置...等等,而只編本身也是一個變數,所以也會有記憶體空間,而指標的記憶體空間位址同樣也可以使用"&"運算子就可以知道了;程式可以直接取得該指標所指位置的變數值。指標通常用來節省記憶體空間以及減少不必要的搬動,如果使用不當的話很容易造成系統或程式的錯誤。

雙重指標的作用為間接參考,也就是記錄著指標以及指標指到的位置,而至於三重指標也只是記錄著雙重指標內的位置...等等依此類推。

本文以C++實作介紹

...繼續閱讀 »

程式設計 微知識 (九) c++ const介紹

const是"Constant"的縮寫,可以用來修飾不同的東西,像是變數或指標或函數...等,被const所修飾到的內容是不可變的。

通常會使用在修飾一個不應該被修改的內容,而且當我們宣告一個const的內容時,必須要將他初始化,不然我們並不能再除了初始化之外的任何時間賦予其值。

...繼續閱讀 »

程式設計 微知識(八)C/C++ Call by value、Call by address、Call by reference

Call by value: 參數以數值方式傳遞,複製一份到另一個呼叫此參數的副程式予以使用。

Call by address(Call by value of pointer): 將參數以記憶體位置的方式傳到呼叫此參數的副程式,副程式需要有一個指標來指到這個參數的記憶體位置,但call by addres本質上也是call by value,只不過那個value剛好就是address而已。

Call by reference: 將參數以數值的方式傳遞到呼叫此參數的副程式,副程式需要有一個參考來接收這個參數,這是只有C++才有的,C是沒有的; 且因為call by address的內容為指向的位置,所以傳址的指標本身然仍然有記憶體位置,但是傳參考是不會有的。也因此C++的Call by reference本質上不是call by value,這也是和call by address之間的差別。

本文以C++實作執行。

...繼續閱讀 »

程式設計 微知識 (七) i++與++i

i++與++i是不一樣的兩個東西:

i++:先使用i的值,再將i的值+1

++i:先將i+1,再使用i的值。

++i會比i++有效率,因為執行i++時,編譯器會需要產生出一個temp用來暫存i的植,指令也因此增加,也因此當反覆執行很多次的時候,++i的效率會比i++來的快。

本文以C++實作介紹。

 

...繼續閱讀 »

程式設計 微知識 (六) 行內函式(inline function)

內嵌函數其實就是將一個function直接展開至程式碼當中。

內嵌函數,也就是在 function前加入inline這個關鍵字,其用意是加速程式的執行速度。經過inline所宣告的function會直接展開在程式碼裡面,展開後的程式碼就會直接存取該參數,省略了呼叫function的資源浪費。也就是好處是不用呼叫函式執行速度較快,缺點是程式會因此變大,通常會用在程式碼不多但是卻常被呼叫的函式,然後只有當編譯器的效益分析為有利的時候,inline的動作才會發生。

本文以C++實作介紹。

...繼續閱讀 »

程式設計 微知識 (五) 遞迴(Recursion)和迭代(Iteration)

遞迴(Recursion):一種透過重複將問題分解為同類的子問題而解決問題的方法。在大部分的程式語言中都支援函數的自我呼叫,也就是說在程式語言中可以通過呼叫函數本身來進行遞迴。

迭代(Iteration):其目的通常是為了接近所需求的目標或結果。每一次對過程的重複被稱為一次"迭代",每一次迭代得到的結果通常會被用來作為下一次迭代的初始值。

本文以C++實作執行。

...繼續閱讀 »

程式設計 微知識(三) 記憶體漏失(Memory leak)

Memory leak指的是由於錯誤或是由於疏忽造成程式未能釋放已經不再使用的記憶體。Memory leak指的並非記憶體的消失,而是在應用程式分配某段記憶體之後,由於設計錯誤,導致在釋放該記憶體之前就失去了對該段記憶體的控制因此造成了記憶體的浪費。

Memory leak會因為減少可用的記憶體數量,造成降低電腦的效能,在最差的情況下,會致使應用程式崩潰。

本文以C++實作執行。

...繼續閱讀 »

程式設計 微知識(二) 函式(function)與巨集(macro)

#define 會建立"巨集"(Macro),定義巨集之後,編譯器就可以使用語彙字元字串用來替代原始程式檔中出現的每個識別項,macro是在前置處理器(preprocessor)處理的。

函式(Function)是執行某項程式碼區塊。函式可以自己定義參數來讓呼叫端將引數傳遞給函式。函式也可以選擇性的傳回值來當作其輸出,function是在編譯器(compiler)處理的。

本文以C++實作執行介紹。

...繼續閱讀 »