漢諾塔絕對是一個經典的演算法題目,雖然當年也講過,程式也不長,但是一直以來總覺得理解的不清楚,看程式也能明白什麼意思,過一段時間程式忘了,想不起來的時候,就怎麼都想不明白了,雖然說好像是那麼回事,就是高不明白。藉著前兩天做八皇后的東風,順便來理一下這個漢諾塔。園盤從上到下編號1, 2, ……,
解決的問題:我建立的這個對象比較複雜,且該對象裡面的成員函數用不同的實現來表示不同的執行個體,換句話說 就是同樣的對象構建過程可以有不同的表示。比如我那天去吃過橋米線,他們有不同的套餐,套餐裡包含的種類是一樣的, 都有一碗米線,一份涼菜,一杯飲料。但是不同的套餐裡這3樣又都不是全部一樣的。此時我們就可以用建造者模式。類圖結構:1.建造者(Builder)角色:給出一個抽象介面,以規範產品對象的各個組成成分的建造。一般而言,此介面獨立於應
using System;using System.Collections;namespace DataStructure{ /// <summary> /// BinaryHeap 的摘要說明。-------二元堆積(基於數組的實現) /// </summary> public class BinaryHeap:IPriorityQueue { protected ArrayList array;
/*============================================================================= Public functions: =============================================================================*/int RTreeSetNodeMax(int new_max) { return
約瑟夫演算法:n個人圍成一圈,每人有一個各不相同的編號,選擇一個人作為 起點,然後順時針從1到k數數,每數到k的人退出圈子,圈子縮小,然後從下一 個人繼續從1到k數數,重複上面過程。求最後推出圈子的那個人原來的編號。思路:按照上面的演算法讓人退出圈子,直到有n-1個人推出圈子,然後得到最 後一個退出圈子的人的編號。程式:坐成一圈的人的編號不需要按序排列#define N 100int yuesefu1(int data[],int sum,int k){ int i=0,j=0,count=
C++語言是案頭系統,尤其是系統軟體、大型應用軟體的主流開發語言。C++語言以其靈活性著稱,同時也更複雜。利用C++編寫健壯的代碼,更具有挑戰性。C++允許動態記憶體管理, 同時也容易導致更多和記憶體相關的問題。一般而言, 除了系統設計上的缺陷, 基於C++的軟體的缺陷和錯誤大部分都和記憶體缺陷(主要包括記憶體訪問錯誤和記憶體流失兩類)相關。
IDE建立了一個資料庫你告訴IDE向你的項目添加一個新的資料庫的時候,IDE就為你建立了一個資料庫。SQL資料庫是一個用有組織的、有關聯的方式為你儲存資料的系統。IDE給了你維護你的資料所需要的所有工具。SQL資料庫裡的資料存在表裡。現在來說,你可以認為它是一個電子製表軟體。它把你的資料群組織在行列之中。列代表資料分類,比如一個連絡人的名字和電話,每一行就代表一張連絡人卡片上的資料。SQL是它自己的語言SQL代表結構化查詢語言
螢幕後的VisualStudio每次你用VSIDE做些什麼,IDE都會為你寫代碼。當你建立了這個logo並告訴VS使用你下載的圖片,VS會建立一個資源並把它與你的應用關聯起來。資源指的是任何的影像檔、音頻檔案、表徵圖、或者任何其他與你的應用的捆綁的任何資料檔案。影像檔與程式整合,所以當程式安裝到其他的機器時,映像會一起被安裝而且PictureBox可以使用它。當你把PictureBox拖拽到你的表單,IDE會自動的建立一個叫做Form1.resx來儲存資源並把它儲存在項目裡。雙擊這個檔案,你可以
2把PictureBox設定為zoom模式。你表單上的每一個控制項都有你可以設定的屬性。點擊下圖中的小黑劍頭兒就可以訪問那些屬性。把PictureBox的Size屬性設定為zoom看看會怎樣。3下載ObjectvillePaper公司的logo。從HeadFirst實驗室下載ObjectvillePaper公司的logo(http://www.headfirstlabs.com/books/hfcsharp)並儲存到你的硬碟。然後點擊PictureBox的屬性箭頭,並選擇圖片。點擊Import,
這一篇文章開始講述如何?一個進階語言的指令碼引擎了。由於工程量較為龐大,因此將分開幾篇文章講。學習做指令碼還是要從簡單的東西做起的。上一篇文章介紹的命令指令碼為實現進階語言的原理做了鋪墊。首先,進階語言和低級語言指令碼的架構是一致的。其次,為了具有較大的最佳化的空間,我們將把進階語言轉換成低級語言,並配合一個低級語言的指令碼引擎來實現進階語言的指令碼引擎。當然,習慣上,在這種情況下我們把低級語言叫『指令』。在這個階段,我們實現的這門語言是非惰性計算的、弱類型的、僅支援基本類型、數組和函數指標的語
局部類型(partial)我個人理解為,就是將一個整體拆分成一個個部分.我們用一段代碼來理解 /// <summary> /// 定義MyClass類的一個部分 /// </summary> public partial class MyClass { public void RtuStrin() { } } /// <summary> /// 定義MyClass類的另一個部分 /// </summary&
如果要你在程式中顯示資料庫中的資料記錄,你首先想用的顯示工具肯定是DataGrid。當然用DataGrid顯示資料記錄是一種既常用又簡單的方法。但是在程式控制方面,它卻無法那麼隨心所欲。本文就是介紹另外一種顯示資料記錄的方法--用ListView來顯示資料記錄,由於他是手動加入記錄,雖然在程式設計中稍微煩瑣了些,但對於那些在特殊的顯示要求,卻往往能夠滿足要求。在.Net FrameWork SDK中定義了許多組件,Visual
Visual C#是微軟公司推出的下一代程式開發語言。他不僅具有Visual C++功能強大的特點,又具有Visual Basic的簡潔,易上手的特點。所以一經推出,就收到了廣大程式開發人員的歡迎。Visual C#和Visual C++的一個明顯的區別在於,Visual C#本身是沒有類庫的,而Visual C++卻是自身就帶有類庫。Visual C#雖然沒有類庫,但作為.Net架構中的一個十分重要的開發語言。他可以使用.Net架構提供的一個通用的軟體開發包--.Net FrameWork
CurrencyGroupSizes屬性此屬性擷取或設定貨幣值中小數點左邊每一組的位元。其文法格式為:public int[] CurrencyGroupSizes{get;set;}l 屬性值:貨幣值中小數點左邊每一組的位元。的預設值是一個一維數組,該數組只包含一個設定為3的元素。主要代碼如下。private void button1_Click(objectsender,EventArgs e){System.Globalization.NumberFormatInfo CN=new
C# static的全部用法收集整理static的全部用法要理解static,就必須要先理解另一個與之相對的關鍵字,很多人可能都還不知道有這個關鍵字,那就是auto,其實我們通常聲明的不用static修飾的變數,都是auto的,因為它是預設的,就象short和long總是預設為int一樣;我們通常聲明一個變數:int a;string s;其實就是:auto int a;auto string s;而static變數的聲明是:static int a;static string
開發程式時,為了更好的識別檔案的相關屬性,經常需要將檔案的路徑、名稱及其副檔名從一個字串中分離出來,這時可以使用Substring方法在字串中進行相應的截取,然後輸出即可。從字串中分離檔案路徑、檔案名稱及副檔名的關鍵代碼如下:string strPath = textBox1.Text.Substring(0, textBox1.Text.LastIndexOf("\\"));string
C#語言有很多值得學習的地方,這裡我們主要介紹C#靜態欄位與C#執行個體欄位,包括介紹
向你的表單添加資料庫驅動控制項現在我們可以回到我們的表單,並添加一些更多的控制項。但是它們不僅僅是一般的控制項,它們是綁定到我們的資料庫和People資料表的列的控制項。這意味著對於表單上一個控制項中的資料的改變將會自動的作用於資料庫裡面的相應資料列。1選擇你想用的資料來源。從資料下拉式清單中選擇顯示資料來源。這將會開啟資料來源視窗,顯示你為你的應用設定的資料來源。2選擇People資料表。在ContactDBDataSet下面,你應該可以看見People資料表和其中所有的資料列。如果你沒看見,
3一旦你鍵入了所有六條記錄,再次從檔案菜單選擇全部儲存。那將會把所有記錄儲存到資料庫。問:我輸入完的資料怎麼樣了?它去哪兒了?答:IDE自動把你鍵入的資料存放區進資料庫的People資料表。資料表,它的列,資料類型,和裡面的所有資料都儲存在SQLServerExpress的ContactDB.mdf檔案裡。這個檔案被作為項目的一部分儲存,並且像你的代碼檔案一樣,IDE會在你修改它的時候更新它。問:好,我輸入了列條記錄。它們會永遠作為我的程式的一部分嗎?答:對,它們就像你寫的代碼和正在建立的表單一
一、基於TCP協議的網路程式下圖是基於TCP協議的用戶端/伺服器程式的一般流程:伺服器調用socket()、bind() 、listen()完成初始化後,調用accept()阻塞等待,處於監聽連接埠的狀態,用戶端調用socket()初始化後,調用connect() 發出SYN段並阻塞等待伺服器應答,伺服器應答一個SYN-ACK段,用戶端收到後從connect()返回,同時應答一個ACK段,服務