excel隊(duì)列

      網(wǎng)友投稿 549 2025-04-02

      excel隊(duì)列

      隊(duì)列的工作原理很簡單,因?yàn)樗c現(xiàn)實(shí)生活中的隊(duì)列完全相同。例如,你在食堂窗口排隊(duì)打飯,如果你先到,當(dāng)然該你先打飯,我排在你的后面,則在你打完飯后我再打飯。

      隊(duì)列只有兩種操作:入隊(duì)和出隊(duì)。將一個(gè)元素加入隊(duì)列,稱為入隊(duì);從隊(duì)列中取出一個(gè)元素,稱為出隊(duì),如下圖1所示。

      圖1

      根據(jù)隊(duì)列的工作原理,在圖1所示的隊(duì)列中,丁只能加到隊(duì)列的末尾,而排在最前的甲將最先出隊(duì)。

      下面,我們使用VBA代碼實(shí)現(xiàn)隊(duì)列。

      實(shí)現(xiàn)隊(duì)列結(jié)構(gòu)需要兩個(gè)類模塊:QueueItem類模塊和Queue類模塊。

      QueueItem類模塊

      在QueueItem類模塊中,存放著一個(gè)數(shù)據(jù)值和一個(gè)指向下一個(gè)元素的指針。代碼如下:

      ‘下一個(gè)隊(duì)列元素

      Public NextItem As QueueItem

      ‘隊(duì)列中當(dāng)前元素的值

      Public Value As Variant

      Queue類模塊

      在Queue類模塊中,包含兩個(gè)方法和一個(gè)屬性。其中,Add方法在隊(duì)列中添加元素,即執(zhí)行入隊(duì)操作;Remove方法移除隊(duì)列中的元素,即執(zhí)行出隊(duì)操作;QueueEmpty屬性判斷隊(duì)列是否為空。完整的代碼如下:

      ‘指向隊(duì)列列首的指針

      Dim qFront As QueueItem

      ‘指向隊(duì)列列尾的指針

      Dim qRear As QueueItem

      ‘入隊(duì)

      Public Sub Add(varNewItem AsVariant)

      Dim qNew As New QueueItem

      ‘將值賦給新元素

      qNew.Value = varNewItem

      ‘如果隊(duì)列為空,則前后指針都指向新元素

      If QueueEmpty Then

      Set qFront = qNew

      Set qRear = qNew

      Else

      ‘將最后的元素指針指向新元素

      Set qRear.NextItem = qNew

      ‘將指向隊(duì)列列尾的指向新元素

      Set qRear = qNew

      End If

      End Sub

      ‘出隊(duì)

      ‘移除隊(duì)列列首的元素并返回其值

      Public Function Remove() AsVariant

      ‘如果隊(duì)列為空,則返回空

      If QueueEmpty Then

      Remove = Null

      Else

      ‘獲取隊(duì)列列首元素值

      Remove = qFront.Value

      ‘如果隊(duì)列中僅一個(gè)元素

      ‘則移除后隊(duì)列為空

      If qFront Is qRear Then

      Set qFront = Nothing

      Set qRear = Nothing

      Else

      Set qFront = qFront.NextItem

      End If

      EndIf

      End Function

      ‘判斷隊(duì)列是否為空

      Property Get QueueEmpty() AsBoolean

      ‘如果隊(duì)列為空則返回True

      QueueEmpty = ((qFront Is Nothing) And(qRear Is Nothing))

      End Property

      假設(shè)原有隊(duì)列“甲乙丙”,現(xiàn)在要將“丁”加入該隊(duì)列。在Add方法中,首先生成新節(jié)點(diǎn)并賦值,如下圖2所示。

      圖2

      然后,進(jìn)行連接,如下圖3所示。

      圖3

      如果添加新元素前為空隊(duì)列,則將隊(duì)首和隊(duì)尾均指向新元素,如下圖4所示。

      圖4

      在移除元素時(shí),從隊(duì)首開始,如下圖5所示。原先qFront指向甲,現(xiàn)在將其指向乙。

      圖5

      Queue類模塊代碼的圖片版如下:

      示例

      下面的示例簡單演示了隊(duì)列。代碼首先生成一個(gè)隊(duì)列并將“甲已丙丁”依次添加到該隊(duì)列,然后移除隊(duì)列中的元素。

      ‘創(chuàng)建新隊(duì)列

      Dim qTest As New Queue

      Sub testQueue()

      With qTest

      ‘入隊(duì)

      .Add “甲”

      .Add “乙”

      .Add “丙”

      .Add “丁”

      Debug.Print “出隊(duì)順序:”

      ‘出隊(duì)

      Do While Not .QueueEmpty

      Debug.Print .Remove()

      Loop

      End With

      End Sub

      運(yùn)行后的結(jié)果如下圖6所示。可以看到,出隊(duì)的順序與入隊(duì)的順序相同。

      圖6

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel中用數(shù)據(jù)有效性防止公式被修改
      下一篇:SUMIF函數(shù)用法案例大匯總!
      相關(guān)文章
      亚洲avav天堂av在线网爱情| 亚洲jjzzjjzz在线观看| 亚洲日韩精品A∨片无码加勒比| 亚洲电影唐人社一区二区| 亚洲久本草在线中文字幕| 亚洲精品卡2卡3卡4卡5卡区| 亚洲综合色自拍一区| 伊伊人成亚洲综合人网7777| 亚洲天堂中文字幕在线| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲AV成人影视在线观看| 亚洲一级免费毛片| 亚洲AV无码久久久久网站蜜桃| 亚洲一区二区三区亚瑟| 亚洲偷偷自拍高清| 亚洲色少妇熟女11p| 亚洲欧美国产国产综合一区 | 亚洲欧美成人av在线观看| 亚洲综合精品第一页| 亚洲人成人网站18禁| 亚洲av无码专区首页| 亚洲精品成人久久久| 国产AV无码专区亚洲AV漫画| 国产亚洲精久久久久久无码| 久久精品国产精品亚洲色婷婷| 777亚洲精品乱码久久久久久 | 亚洲精品视频在线观看免费| 亚洲成人黄色在线观看| 精品亚洲国产成人| 亚洲人成网站在线播放2019 | 国产亚洲女在线线精品| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 亚洲黄黄黄网站在线观看| 亚洲色婷婷一区二区三区| 亚洲va久久久噜噜噜久久| 久久久久亚洲AV成人片| 亚洲专区一路线二| 亚洲乱码国产乱码精华| 亚洲AV中文无码乱人伦在线视色 | 亚洲国产成人精品久久| 亚洲色偷偷色噜噜狠狠99|