在資料結構中還有一種很常見的隊列叫做雙端隊列,我們在上一篇部落格《C++ STL學習——queue》中講到的隊列queue是一種最標準的隊列,只能在尾部插入資料,在頭部刪除資料。而今天我們講到的deque分別可以在兩端進行插入與刪除,可以說用起來更加的靈活。範例程式碼上傳至 https://github.com/chenyufeng1991/STL_deque 。 (1)建立一個deque
隊列是一種先進先出的的資料結構,我們同樣可以使用數組、鏈表等來實現。我們可以在隊列的尾部進行插入元素,在隊列的頭部取出元素。普通的隊列由於空間利用率不高,所以我們一般都用迴圈隊列。迴圈隊列中最重要的的兩個操作就是判斷是否為空白和是否已滿。當head==tail時,表示隊列為空白。當(tail+1)%MAX_SIZE == head,表示隊列已滿。
當我們一開始使用C語言來處理字串的時候,會感覺非常的麻煩。C語言中缺少相應的字串處理函數,如果想要實現某個字串功能,只能靠我們自己來實現。但是當來到C++中,字串的處理就會變得異常簡單。今天我們就來學習一下C++中最高頻的字串處理函數。範例程式碼上傳至:https://github.com/chenyufeng1991/CppString。 首先要引入C++中的字串標頭檔: #include
我在之前一篇部落格《C語言實現非迴圈雙鏈表節點的刪除(不帶頭結點)》中詳細講解了不含頭尾節點的雙鏈表中刪除一個節點,處理過程還是稍顯麻煩。自從我們學習使用頭尾節點來處理雙鏈表後,刪除過程就非常方便。代碼上傳至 https://github.com/chenyufeng1991/DeleteNodeDoubleLinkedList_HeadList 。 核心代碼如下: //刪除pos位置的節點int
在刷一些題目的時候,總是會碰到字串和數字進行轉化的問題,今天我們就在C++中來用多種方法實現。範例程式碼上傳至 https://github.com/chenyufeng1991/TransferStringAndInt 。 (1)string -> char * // string -> char * string str3 = "chenyufeng"; const char
我在上一篇部落格《C語言實現使用靜態數組實現迴圈隊列》中實現了使用靜態數組來類比隊列的操作。由於數組的大小已經被指定,無法動態擴充。所以在這篇部落格中,我換成動態數組來實現。動態數組可以不斷開闢記憶體空間,只是會在數組的初始化時有所不同,其他對數組的操作都是一樣的。代碼上傳至 https://github.com/chenyufeng1991/Queue_DynamicArray 。 (1)聲明變數 static
棧是最為常用的資料結構了,很多演算法都是依靠棧來實現的,比如遞迴。我們要手動來實現棧,顯得十分繁瑣和麻煩,而且複用性不好。C++ 的STL中已經幫我們封裝好了棧,我們只要方便的進行調用即可。該篇部落客要介紹STL 中stack的使用,stack應該說是STL中最簡單的容器了。執行個體代碼上傳至 https://github.com/chenyufeng1991/STL_stack 。 (1)首先引入標頭檔 #include <
我們在上一篇部落格中講解了二叉樹,這一次我們來實現二叉樹的進階——二叉尋找樹(Binary Search Tree),又稱二插排序樹(Binary Sort Tree)。所以簡稱為BST。二插尋找樹的定義如下: 1.若左子樹不為空白,則左子樹上所有節點的值均小於它的根節點的值; 2.若右子樹不為空白,則右子樹上所有節點的值均大於它的根節點的值; 3.左右子樹也分別為二叉排序樹;
heap堆其實是一種比較複雜的資料結構,尤其涉及到建堆和調整堆的時候。好在在STL中已經封裝了heap的一些操作,可以讓我們比較方便的使用堆。比如判斷堆,刪除一個元素,插入一個元素,以及堆排序。範例程式碼上傳至 https://github.com/chenyufeng1991/STL_heap 。 (1)首先匯入標頭檔<algorithm>.
我在前面的部落格中講解了鏈表、棧和隊列,這些資料結構其實都是線性表,並且給出了詳細的實現。從今天開始,我們將要來學習樹,樹作為一種資料結構我們經常會用到,作為起步和基礎,我們先來實現二叉樹,也就是每個節點有不超過2個子節點的樹。對於樹的操作,最基本的建立、遍曆、求樹高、節點數等。代碼上傳至 https://github.com/chenyufeng1991/BinaryTree 。 (1)節點的定義 typedef
我們在上一篇部落格中《C++ STL學習——stack》簡單介紹了STL 中stack這種資料結構的使用,這篇部落客要來講一下queue隊列的使用。其實queue的使用和stack一樣簡單。範例程式碼上傳至 https://github.com/chenyufeng1991/STL_queue 。 (1)首先要引入標頭檔 #include <queue> . 並使用命名空間 using
在之前的部落格中我們學習了很多STL中的模板庫,包括deque,queue,stack,list等,他們都是一種資料結構,也就是說STL已經為我們實現了。今天我們來講講STL中比較大的一個庫<algorithm>. 主要是一些演算法的運算的實現,範例程式碼上傳至 https://github.com/chenyufeng1991/STL_algorithm 。
我在前面兩篇部落格中分別使用了靜態數組、動態數組兩種方式來構造棧,實現起來很方便,但總覺得靈活性還不夠,因為無論怎樣,我們都是要指定數組的長度。這篇部落格中我們將會使用帶頭結點的單鏈表來類比棧。為什麼選用單鏈表呢。因為對於棧來說,彈出、壓入等操作都是對棧頂來操作的。而單鏈表對第一個節點的操作是最為方便的。兩者剛好能對應起來。代碼上傳至
現在公司要做一個使用C#程式調用C++的一個DLL庫,解析檔案的功能。所以在網上找了一些資料。 一、結構體傳遞 #define JNAAPI extern "C" __declspec(dllexport) // C方式匯出函數typedef struct { int osVersion; int majorVersion; int minorVersion;
不帶頭結點的非迴圈雙鏈表在刪除節點的時候比價麻煩,因為同時要維護prior和next兩個指標。在處理第一個節點和最後一個節點的時候都要分別考慮,同時也需要考慮節點數量為1的情況。刪除情況分為下面兩類: (1)刪除pos位置的節點; (2)判斷x是否在鏈表中,若存在則刪除; 代碼上傳至 https://github.com/chenyufeng1991/DeleteNodeDoubleList 。 核心代碼如下:
DateTime類型是比較常用的變數類型,但是以前處理都比較業餘,下面總結2中常用方式 這次把它總結下: DateTime t1 = default(DateTime); DateTime t2 = DateTime.MinValue; 這樣t1,t2 的值都是 {0001/1/1 0:00:00} 另外總結下controller和過濾器中如何傳值 過濾器中 public class
學過C++的人肯定會很熟悉STL標準模板庫,STL其實就是封裝了一系列的介面,供我們調用。很多函數或者演算法的實現不需要我們從頭開始寫,大大提高我們的編程效率。這篇部落格在簡單介紹STL的情況下,會詳細的來介紹vector的使用。 STL共有六大組件:
對於雙向鏈表,個人推薦使用帶頭結點尾結點的方式來處理會比較方便。我在《C語言實現雙向非迴圈鏈表(不帶頭結點)的節點插入》中詳細實現了在不帶頭結點的情況下的插入。這次我們將會來在使用頭結點尾結點的情況下在任意的位置插入元素。代碼上傳至 https://github.com/chenyufeng1991/InsertNodeDoubleLinkedList_HeadNode 。 核心代碼如下:
如果由我們自己來實現一個鏈表,會寫上不少代碼,包括要實現建立、刪除、插入等等操作。但是如果我們用了STL,那麼該模板庫就為我們提供了一個雙向鏈表list,可以讓我們非常方便的實現鏈表操作。要使用list,首先要引入標頭檔 #include <list> .相關的範例程式碼上傳至 https://github.com/chenyufeng1991/STL_list 。 (1)建立list