2009年9月16日 星期三

使用Stack VS Queue(M03)

使用堆疊(Stack)

1、循序存取集合中的項目
2、後進先出(LIFO)類型的資料架構
3、常用方法
  • Push:新增一個項目到頂端。
  • Pop:從Stack頂端取出一個項目。
  • Peek:允許檢視堆疊頂端上的項目,但不將之移除。若在空的堆疊上呼叫Peek,會觸發InvalidOperationException
程式實作
Module Module1

Sub Main()
Dim st As New Stack
st.Push(1)
st.Push(2)

Dim nIndex As Integer = 0

For Each o As Object In st
Console.WriteLine("移除前Queue->{0}:" + ControlChars.Tab + "{1}", nIndex, o.ToString)
nIndex = nIndex + 1
Next o
st.Pop()

nIndex = 0

For Each o As Object In st
Console.WriteLine("移除後Queue->{0}:" + ControlChars.Tab + "{1}", nIndex, o.ToString)
nIndex = nIndex + 1
Next o
st.Clear()

End Sub

End Module

使用Stack考量
  • 需以後進先出時。
  • 使用完資料之後就可以丟棄此資料項目時。
  • 建立時最好設定初始的容量(Capacity),避免無意義的浪費記憶體。
=====================================================
使用佇列(Queue)
1、先進先出(FIFO)類型的資料結構
2、常見方法
  • Enqueqe:新增一個項目到Queue的後面。
  • Dequeue:從Queue中移除一個項目,並回傳目前被移除的這個項目。若從空的佇列中移除一個項目會觸發InvalidOperationException例外。
  • Clear:清除所有項目。
  • Peek:查詢第一個項目,不移除此項目。若從空的佇列中呼叫Peek方法,一個項目會觸發InvalidOperationException例外。
3、常見屬性
  • Count:回傳此Queue有多少個項目。
程式實作
Sub Main()
Dim q As New Queue
q.Enqueue(1)
q.Enqueue(2)
q.Enqueue(3)
Dim nIndex As Integer = 0
For Each o As Object In q
Console.WriteLine("Queue->{0},{1}", nIndex, q.ToArray(nIndex).ToString)

nIndex += 1
Next
End Sub

使用Queue的考量
  • 需使用先進先出時
  • 為循序資料時

沒有留言:

張貼留言