2010-10-01 124 views
8

你好我仍然是一個學生,我有點困惑堆棧和排隊? 第一個問題是,堆棧vs排隊?

  1. 什麼他們兩者之間的主要diffrence是什麼?

  2. btw在正常排隊旁邊有一個循環排隊那怎麼樣?他們如何工作?有什麼不同的排隊方法嗎?

  3. 即時通訊使用PHP,是否有一個簡單的(非常簡單或易於閱讀)示例代碼,我可以學習(鏈接也可以)。

  4. 有流行,推等(堆疊和排隊),有沒有什麼像在PHP?

非常感謝您的期待中。

+4

我明白,你是學生,但你應該能夠平凡搜索和找到這些問題的答案。 – 2010-10-01 07:30:13

+1

查找LIFO和FIFO。 – 2010-10-01 07:33:20

+1

@noon - 也許他了,但他已經在askied在計算器上30個問題,所以他必須相信給出答案的質量。 – kevchadders 2010-10-01 07:43:38

回答

20

1:當用疊層插入/移除操作上的數據結構的同一端都工作(頂部)

與隊列中的插入發生在一個端部(後端)和在另一端(正面)去除。

(兩個圖像是從相應的維基百科條目)

2:看到http://en.wikipedia.org/wiki/Circular_buffer

3:和4:見SplStackSplQueue

+0

+1的實際提正確的SPL類型。 – Gordon 2010-10-01 08:01:12

+0

+1。偉大!。讓我們看看別人怎麼說。 – 2010-10-02 17:43:20

3

看樣子你是被操縱朝向差先入先出和後進先出隊列之間。堆棧是前者,而循環隊列是後者的有效實現。

  1. A stack是LIFO(後進先出)隊列。

  2. 你可以有一個circular queue - 這些都是最常見的通信接口緩衝區,因爲他們只有有限的內存數據進來異步,並通過在不同的時間被CPU讀取數據。

  3. 如果你很熟悉你的語言,你可以用任何語言創建隊列。

  4. php website提供了大量的文檔。

2

A stack添加並從同一端刪除項目。

queue添加項背面,並從所述前項(如在銀行的線。)

有一個article about them both,在與代碼示例詳細說明了。

A circular buffer空間有限,不斷添加項目以圓形方式覆蓋最後的項目。

7

在PHP中你可以使用一個數組()來保存你的數據都棧和隊列,並使用array_ *函數來處理它們。看看array functions at php.net

你有

  • array_push - 把一個新的元素在數組的末尾
  • array_pop - 從數組的末尾刪除元素
  • array_shift - 將從頭開始刪除一個元素陣列
  • array_unshift的 - 把一個新的元素到數組的開頭。

  • 對於棧你會使用array_push和array_pop

  • 對您想要使用array_push和array_shift

循環緩衝器我將實現作爲一個獨立的對象的隊列。