2016年6月17日 星期五

Data Structure_1 -linked list

         哈囉大家好,在這邊我會陸續新增關於資料結構、程式的筆記以及自己的一些理解。

         在開始資料結構的時候,大家首先接觸的一定是所謂的array(陣列)跟linked list(連結串列)。

         在這邊,我想介紹的是    linked list.
         首先,第一個問題,甚麼是linked list呢? 在這邊一張圖能清楚說明






        在這邊,你的整個linked list會包含你要放資料的部份以及要"連結"到下一個人的部分。

        用程式碼來說,就像下面這邊一樣
   
   class node{
            int data;
            class node *next;
   };
   node Node;

        在這邊,data代表著你要放資料的部分,而next代表著下一個的地址。
    
        我們可以用一個比喻來想linked list 跟array的差異

        今天,有兩個郵差,一個郵差A每天只要送1號到10號的郵件,而另外一個郵差B則是取決於它送信的那個人要不要他繼續送信給別人。

          在這邊,如果說你要叫郵差A送信,想當然耳,郵差A一定超方便的把信送完,因為他們是"連續的",然而,如果今天你叫郵差A送信到11號,他會回答你"抱歉,這已經脫離我的工作範圍了!",這就是所謂的"被劃分好的"。當然,如果今天2號跟4號沒有信,他可以直接送3號,接下來就可以直接跳到五號了,另外一個郵差卻無法。

        那,如果我們是叫郵差B送信呢?,郵差B會先跑的他手上有的第一封信的位置,送完之後,該戶人家可能會說"郵差先生,能幫我送信去這個地方嗎?"緊接著郵差B就會跑到下一個人,但是你也知道,除非有人懶惰,不然通常要送信,地址不可能是連續的,郵差唯一有的資訊就是下一個人的地址,他也不會知道下下一個人的地址。

       這,就是array跟linked list的差異,array的記憶體通常是連續的,區塊的,很多時候他會占用很大一塊記憶體,但她處理起來也會相對快速。linked list的記憶體通常是零碎的,我們會透過指標來連接他們,他的記憶體會比較省,但相對的他的處理時間跟程式就會需要比較長。

今天就到這邊啦,下一篇會是 tree.

2016年4月2日 星期六

[c++]DEVc++5.11加上OpenCV2.4.9

        在這邊,因為我被這個該死的東西困擾很久。所以當我解決這個問題的時候,就上來跟大家分享啦!!

        這邊,我將會使用Dev C++ 5.11版 + OpenCV 2.4.9來做使用。

        首先,第一步當然是下載好Dev C++以及 OpenCV2.4.9。

        第二步,請大家將OpenCV解壓縮到C槽。


第三步,就是開始調整你的編譯器啦!

首先,打開Dev C++,在工具->編譯器選項。



圖上你可以看到,在連接器命令串中多了其他的字元,這些字元代表的是程式庫(lib),這東西代表的是你將要使用的程式庫,如果你想加入其他程式庫,你可以點選你的OpenCV資料夾去察看有哪些程式庫,如果你跟我存放的路徑一樣,你可以從 C:\opencv\build\x86\vc12\lib 去尋找,在這邊,我使用x86是因為5.11版本的MinGW貌似是只有32位元的,我用x64的會出現問題。

如果你不想打字,我這邊幫你附上命令串中的文字

-static-libgcc -lopencv_core249 -lopencv_highgui249 -lopencv_imgproc249

第四步,點選目錄->二進位檔。這邊的二進位檔,主要就是我們所謂的.dll檔,我們也同樣能從目錄中找尋到我們需要的dll檔。C:\opencv\build\x86\vc12\bin。之後的每一步都可以按照我塗上下去尋找即可











PS1.後記 : 在這邊,我前期使用的是OpenCV3.1.0版,這個版本的lib檔只有一種,那就是opencv_world310.lib,我使用同樣的邏輯在Dev C++中嘗試去使用他,但是他會像我剛剛講的出現Bug,所以我只好改回來使用較舊的2.4.9版本。

PS2.如果有出現警告訊息例如找不到highgui_249.dll檔,可以直接將剛剛上面提到的資料家中的該檔案抓出來丟在與你現在這個專案同一個資料夾下他就可以使用了。