Time of Update: 2018-12-05
在前一篇文章(AVL樹的插入刪除尋找演算法實現和分析-1(平衡因子法))中,介紹了如何用平衡因子記錄左右子樹的高度差的方法來實現AVL樹的插入刪除和尋找的演算法,並分析了這種方法的一些缺陷,這裡,我將會使用另一種方法來實現這些演算法,而且個人覺得比前一篇文章的所寫實現更加簡單,思路更加清晰。在介紹這種方法之前,先說說怎麼樣求一棵二叉樹的高度(或深度)。其代碼和解釋如下:int BiTreeDepth(BiTree BT){ //求樹的深度
Time of Update: 2018-12-05
代理模式VS面板模式VS適配器模式學習了一個多月的設計模式,下面就對一些比較容易混淆的模式作一些比較和總結吧,如有不正確的地方,還望大家指正。首先,看看代理模式的定義:為其他對象提供一種代理以控制對這個對象的訪問。以下是它的UML圖:Subject類定義了RealSubject和Proxy的共用介面,這樣就可以在任何使用RealSubject的地方都可以使用Porxy。為什麼要用代理模式呢?它應用於什麼場合呢?1、遠程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在於
Time of Update: 2018-12-05
你所不知的private繼承 在C++的類中有許多種繼承方式,而我們在軟體設計和編寫代碼時用得最多的就是public繼承,我們很少接觸到private繼承。但是我們在設計時真的有思考過什麼時候應該用public繼承,什麼時候不該使用public繼承,什麼時候應該想想那些經常被我們遺忘的知識,讓我們從它們被遺忘的角落裡重拾它的光芒。例如private繼承。As we all know,public繼承是塑模出一種is-a關係。什麼是is-a的關係呢?Effective
Time of Update: 2018-12-05
今天來進行其他兩個模式的對決,1號選手職責鏈模式,2號選手狀態模式。開始對決:職責鏈模式VS狀態模式。首先來看看1號選手職責鏈模式的簡介,它的定義為:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一對象處理它為止。它的UML圖如下:下面來看看1號選手職責鏈模式的好處:當客戶提交一個請求時,請求是沿鏈傳遞直至有一個ConcreteHander對象負責處理它。接收者和寄件者都沒有對方的明確資訊,且鏈中的對象自己並不知道鏈的
Time of Update: 2018-12-05
聽到二分尋找,大家可能都會覺得它非常簡單,從而會自然而然地忽略它。那麼在實現這個看似簡單的演算法過程中有沒有什麼值得注意的地方呢?下面是我寫的一個二分尋找的實現int binary_search(int array[],int n,int value){ int begin = 0, end = n-1, mid = 0; bool flag =0; //判斷資料的排序方式,從小到大則為1,從大到小則為0 for(int i = 0; i < n-1; ++i) /
Time of Update: 2018-12-05
#include <windows.h> #include <initguid.h> #include <ole2.h> #include <mstask.h> #include <msterr.h> #include <wchar.h> #include<stdio.h> /////////////////////////////////////////////////////////////
Time of Update: 2018-12-05
二叉樹是一種常用的資料結構,在程式中也經常需要使用二叉樹,但是你所使用語言卻並不一定提供了二叉樹這種資料類型,所以為了方便使用,我們可以自己實現一個二叉樹的資料類型。在需要時就像使用其他已定義的類型一樣方便。下面給出一些本人寫的演算法和解釋(基於C語言),希望對讀者寫一個二叉樹資料類型有所協助。0、遞迴的四條基本法則由於二叉樹中的演算法大多使用遞迴來實現,而且使用遞迴實現也使代碼非常簡潔和易於理解。但是寫一個好的遞迴演算法並不是一件容易的事,所以我覺得在開始這些演算法的講解之前有必要向大家說說遞
Time of Update: 2018-12-05
用GDB調試多進程程式 有一段時間沒有寫技術方面的東西了^_^。眾所周知,GDB是Unix/Linux下偵錯工具的龍頭老大,GDB功能強大,我們在平時多使用其一些最基本的功能,而且一般調試的都是單進程的程式。最近一個項目中的問題讓我接觸如何使用GDB調試多進程程式,更確切的是說調試調用fork的多進程程式。 使用GDB最好的文檔就是其名為'Debugging with
Time of Update: 2018-12-05
常用SQL語句首行當然是最基本的增刪查改啦,其中最重要的是查。還有就是一些要注意的地方,就是SQL語句對大小寫不敏感,語句中列名對應的值要用單引號''括起來不是雙引號。SQL 使用單引號來環繞文本值。如果是數值,請不要使用引號。特別是C/C++程式員要注意,通常錯誤都是在用字串進行拼接SQL語句時,由於雙引號和單引號混用,特別容易出錯。一、查:1、SELECT 列名稱 FROM 表名稱,其中列名可以是多個,中間用豆號分開,如SELECT LastName,FirstName FROM
Time of Update: 2018-12-05
BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize) { // Get the required size of the buffer that receives the Unicode // string. DWORD dwMinSize; dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
Time of Update: 2018-12-05
GetIp(){//初始化網路程式庫//WSADATA wsd;//WSAStartup(MAKEWORD(2,2),&wsd);DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;NETRESOURCE* nRes; NETRESOURCE* nRes1; NETRESOURCE* nRes2; HANDLE lphEnum;LPVOID Buf = new char[4096];LPVOID Buf1 = new char[4096];LPVOID
Time of Update: 2018-12-05
初窺資料結構 由於今晚開會,偉傑師兄會說資料結構,所以今天下午就用了一點時間看了一下資料結構,談談今天的收穫吧!首先,知道了什麼是資料結構,資料結構是指資料以及相互之間的聯絡,可以看作是相互之間存在著某種特定關係的資料元素的集合,可以把資料結構看成是帶結構的資料元素的集合。 然後瞭解了資料結構包括哪些方面。1、資料元素之間的邏輯關係,即資料的邏輯結構。2、資料元素及其關係在電腦儲存空間中的儲存方式,即資料的儲存結構,也稱為資料的物理結構。3、施加在該資料上的操作,即資料的運算。邏輯結構類型包括
Time of Update: 2018-12-05
函數呼叫慣例解析 http://www.allaboutprogram.com/index.php?option=content&task=view&id=29&Itemid=31HouSisong@263.net 2004.11.07整理 文章來源於abp論壇中的一篇文章:http://bbs.allaboutprogram.com/viewtopic.php?t=1245(原文章寫於2003.12.01,這裡補充了函數傳回值傳遞方式的說明) 前言:
Time of Update: 2018-12-05
該方法可以在dll或者exe中共用變數。注意資料的同步。// Tell the compiler to put this initialized variable in its own Shared // section so it is shared by all instances of this application.#pragma data_seg("Shared")volatile LONG g_lApplicationInstances = 0;#pragma data_seg()
Time of Update: 2018-12-05
開篇-模式和原則前言正式接觸使用設計模式近兩年了,一直想寫點東西來鞏固所學,但是遲遲沒有動作,總想時間和見識再多一些的時候再動筆,但是拖得越久越感覺合適的時機永遠不會有,只有不斷實踐才能換來進步,也許再不寫就永遠也寫不出來了,於是我終於開始了。談到設計模式,應該還沒有人能超越GOF的開山之作,所以談不上什麼創新,歸根結底還是重複前人的論述和思想,更多的只能是整理和個人的一些心得體會。因為從設計模式誕生以來,業界還是發生了很大的變化的,開發工具和開發過程已經更新換代了很多次,所以很多模式在現在已經
Time of Update: 2018-12-05
void C***::OnSetDeskIcon() { HWND hwndParent = ::FindWindow( "Progman", "Program Manager" ); HWND hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL ); HWND hwndSysListView32 = ::FindWindowEx(
Time of Update: 2018-12-05
Time of Update: 2018-12-05
在學習建造者模式時,一直有一個問題想不明白,就是為什麼要存在指揮者類。感覺沒有指揮者類也完全同樣的簡單快捷,甚至比沒有指揮者類更容易理解。以下是本人用C++寫的一個例子程式://Builder.cpp//運用了建造者模式#include <iostream>using namespace std;class Automobile//抽象汽車類{public:virtual ~Automobile(){cout<<"destruction
Time of Update: 2018-12-05
1.closesocket(一般不會立即關閉而經曆TIME_WAIT的過程)後想繼續重用該socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已經處於串連狀態的soket在調用closesocket後強制關閉,不經曆TIME_WAIT的過程:BOOL bDontLinger =
Time of Update: 2018-12-05
要得到 Windows 2000 中安裝的硬體裝置列表,應用程式可以調用 SetupDi 類 API 函數。回到頂端更多資訊以下程式碼片段示範如何顯示已經安裝的所有硬體裝置的列表:#include <stdio.h>#include <windows.h>#include <setupapi.h>#include <devguid.h>#include <regstr.h>int main( int argc, char *argv[