系統程式設計師成長計畫-演算法與容器(三) (上)
作者****:李先靜
前面我們通過容器介面抽象了雙向鍊錶和動態陣列,這樣佇列的實現就不依賴於具體的容器了。但是作為佇列的使用者,它仍然要在編譯時決定使用哪個容器。佇列的測試程式就是佇列的使用者之一,它的實現**如下:
queue* queue = queue_create(linear_container_dlist_create(null, null));這裡必須明確指定是 linear_container_dlist_create還是 linear_container_darray_create,假設使用者想要換一種容器,那還是要修改**並重新編譯才行。現在我們思考另外乙個問 題,如何讓使用者(如這裡的測試程式)想換一種容器時,不需要修改**也不需要重新編譯。for(i = 0; i < n; i++)
...
系統程式設計師成長計畫 演算法與容器 三
前面我們通過容器介面抽象了雙向鍊錶和動態陣列,這樣佇列的實現就不依賴於具體的容器了。但是作為佇列的使用者,它仍然要在編譯時決定使用哪個容器。佇列的測試程式就是佇列的使用者之一,它的實現 如下 queue queue queue create linear container dlist create...
系統程式設計師成長計畫005
1.這個變成大寫的函式,就不需要用函式指標來給foreach做引數了。因為他沒有什麼其他變種,不像print那樣,既要print int又要print str。函式指標,或者說 函式,別瞎用!2.書裡的寫法 dlist foreach dlist,str toupper,null 看來還是堅持了 函...
系統程式設計師成長計畫 併發 五
文章出處 作者 李先靜 無鎖 lock free 資料結構 多執行緒併發執行時,雖然有共享資料,如果所有執行緒只是讀取共享資料而不修改它,也是不用加鎖的,比如 段就是共享的 資料 每個執行緒都會讀取,但是不用加鎖。排除所有這些情況,多執行緒之間有共享資料,有的執行緒要修改這些共享資料,有的執行緒要讀...