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

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

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

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

本文以C++實作介紹。

...繼續閱讀 »

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

指標(Pointer)

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

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

本文以C++實作介紹

...繼續閱讀 »

快速排序法 Quick Sort

快速排序法(Quick Sort)是排序演算法的一種,是使用Divide and Conquer(分而治之)的策略來執行。其作法是從數列中挑選一個基準點(Pivot),大於基準點的放在一邊(右邊),小於基準點的放另一邊(左邊),之後再反覆對序列執行此動作至左子數列和右子數列只剩一個數值或沒有數值即可完成排序。

本文以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++實作執行。

...繼續閱讀 »