遞歸可以用迭代來等價(jià)代替。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括潼南網(wǎng)站建設(shè)、潼南網(wǎng)站制作、潼南網(wǎng)頁(yè)制作以及潼南網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,潼南網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到潼南省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Const QueueVolume = 1000000
Private QueueX(QueueVolume) As Long
Private QueueY(QueueVolume) As Long
Private SrcColor As Long, DestColor As Long
Private QStart As Long, QEnd As Long
Private Function EnQueue(ByVal X As Long, ByVal Y As Long) As Boolean
If (QEnd + 1) Mod QueueVolume QStart Then
QueueX(QEnd) = X
QueueY(QEnd) = Y
QEnd = QEnd + 1
EnQueue = True
Else
EnQueue = False
End If
End Function
Private Function DeQueue(ByRef X As Long, ByRef Y As Long) As Boolean
If QStart QEnd Then
X = QueueX(QStart)
Y = QueueY(QStart)
QStart = QStart + 1
DeQueue = True
Else
DeQueue = False
End If
End Function
Private Sub Qytc()
Dim X As Long, Y As Long
Dim cr As Long
Do While DeQueue(X, Y)
cr = GetPixel(Picture1.hdc, X, Y)
If cr = SrcColor Then
Picture1.PSet (X, Y), DestColor
EnQueue X, Y - 1
EnQueue X, Y + 1
EnQueue X - 1, Y
EnQueue X + 1, Y
End If
DoEvents
Loop
End Sub
Private Sub Command1_Click()
EnQueue 5, 6
Qytc
End Sub
Private Sub Form_Load()
QStart = 0 '隊(duì)列左端
QEnd = 0 '隊(duì)列右端
SrcColor = RGB(255, 0, 0)
DestColor = RGB(0, 0, 255)
End Sub
說明:放一個(gè)PictureBox1,ScaleMode設(shè)為3-pixel,BackColor改成紅色。
放一個(gè)按扭Command1。
如果隊(duì)列長(zhǎng)度不夠,把Private Const QueueVolume = 1000000 再改大點(diǎn)。
只適用于VB6。
(用VB.net就不用這么麻煩了)
Imports?System.Runtime.InteropServices
Module?APIs
StructLayout(LayoutKind.Sequential)
Public?Structure?FILETIME
Public?dwLowDateTime?As?UInteger
Public?dwHighDateTime?As?UInteger
Public?ReadOnly?Property?Value()?As?ULong
Get
Return?CType(dwHighDateTime??32,?ULong)?+?dwLowDateTime
End?Get
End?Property
End?Structure
Public?Delegate?Sub?TimerCompleteDelegate()
DllImport("kernel32.dll")
Public?Function?CreateWaitableTimer(lpTimerAttributes?As?IntPtr,?bManualReset?As?Boolean,?lpTimerName?As?String)?As?IntPtr
End?Function
DllImport("kernel32.dll")
Public?Function?SetWaitableTimer(hTimer?As?IntPtr,?ByRef?ft?As?Long,?lPeriod?As?Int32,?pfnCompletionRoutine?As?TimerCompleteDelegate,?pArgToCompletionRoutine?As?IntPtr,?fResume?As?Boolean)?As?Boolean
End?Function
Public?Function?SetWaitableTimer(hTimer?As?IntPtr,?ByRef?ft?As?Long,?lPeriod?As?Int32)?As?Boolean
Return?SetWaitableTimer(hTimer,?ft,?lPeriod,?Nothing,?IntPtr.Zero,?True)
End?Function
End?Module
SetWaitableTimer的聲明錯(cuò)了
不熟悉VB,如有不妥的地方請(qǐng)包涵!
Public Class Stack
Dim aryData() As Integer
Sub New(ByVal Num As Integer)
Dim aryData(Num) As Integer
End Sub
Function Pop() As Integer
If (aryData.Length = 0) Then
Return 0
Else
Dim a As Integer
a = aryData(aryData.Length)
aryData(aryData.Length) = Convert.ToInt32(DBNull.Value)
Return a
End If
End Function
Sub Push(ByVal n As Integer)
For Each i As Integer In aryData
If (aryData(i) = Convert.ToInt32(DBNull.Value)) Then
aryData(i) = n
End
Else
Continue For
End If
Next
End Sub
Sub PrintStack()
For Each i As Integer In aryData
If (aryData(i) = Convert.ToInt32(DBNull.Value)) Then
End
Else
Print(aryData(i))
End If
Next
End Sub
End Class
默認(rèn)堆棧大小1 MB
具體的我也不了解,在MSDN上找了到了點(diǎn)東西看看對(duì)你有沒幫助:
建立新線程指定并線程的最大堆棧大?。?/p>
用EDITBIN的/STACK選項(xiàng):
不行還是在C++那里想辦法吧,比如減少堆棧的使用,少用遞歸之類的。
水平不夠就說這些了。
題主用的是 VB6 時(shí)代的 Windows API,那里面的 Long 類型相當(dāng)于 .NET 里的 Int32,聲明 API 時(shí)要把所有 Long 類型替換成 Int32 才可以正常使用,否則堆棧溢出。
另外操作內(nèi)存這種函數(shù)需要管理員權(quán)限來運(yùn)行,否則程序會(huì)報(bào)錯(cuò)甚至崩潰。
1、聲明數(shù)組的語句:
Dim?types(??)??As?integer
2、然后使用ReDim語句來配置數(shù)組大小。
ReDim?Types(X+1)
3、假設(shè)想改變數(shù)組大小又不想丟失原來的數(shù)據(jù),僅僅要在ReDim語句中包括Preservekeyword就能夠,典型語句為:
ReDa_m?PresetVe?Types(10,23)?
對(duì)于多維數(shù)組,在使用Preservekeyword時(shí),僅僅能改動(dòng)最后一維的大小。假設(shè)改變其它維,那么將出現(xiàn)執(zhí)行錯(cuò)誤。假設(shè)不清楚某維的當(dāng)前大小,能夠使用GetI~ength函數(shù)來獲取。
擴(kuò)展資料:
數(shù)組的使用:
用For Each來循環(huán)遍歷一個(gè)數(shù)組。比如:
Dim?x?As?Integer
F0r?Each?x?In?arrayl
Console.WriteLine(x)
Next?
在使用數(shù)組時(shí)還要注意,不僅聲明語法有變化,并且在執(zhí)行時(shí)處理方式也有了非常大的變化。VB.NET在堆棧中給數(shù)組分配地址空間,當(dāng)向一個(gè)方法傳遞數(shù)組類型的參數(shù)時(shí),使用的是引用傳遞而不是值傳遞。以下是互相傳遞數(shù)組引用的三個(gè)方法:
Dim?arrayl(3,3)AS?Integer
Dim?array2?As?Integer(,)
Redim?array2(3,3)
Dim?array3?As?Integer(,)={{2,4},{12,29}}
新聞標(biāo)題:vbnet中的堆棧 vbnet函數(shù)與模塊
路徑分享:http://chinadenli.net/article2/hjjsic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、軟件開發(fā)、商城網(wǎng)站、微信小程序、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)