資料結構與演算法(14) 佇列習題一

2021-07-31 09:58:47 字數 1966 閱讀 2995

題目:如何使用兩個棧實現佇列

思路:假設用來實現佇列的兩個棧分別為stack1和stack2,保證兩個棧總有乙個為空

入隊演算法:

如果stack2不為空,先將stack2中的元素彈出並壓入stack1;

將元素壓入stack1

出隊演算法:

如果stack2不為空,那麼棧頂元素就是隊首元素,直接彈出棧頂元素即可;

如果stack2為空,那麼先將stack1中的元素彈出並壓入stack2,彈出stack2的棧頂元素;

/**

* 使用兩個棧實現佇列

* @param

元素型別

*/public class

queuewithtwostacks

/**

* 判斷是否為空

* @return true 為空 false 不為空

*/public boolean isempty()

return

false;

}/**

* 入隊

* @param data 入隊元素值

*/public void enqueue(anytype data)

// 將元素值壓入stack1

stack1.push(data);

}/**

* 出隊

* @return 出隊元素

*/public anytype dequeue() else

// 此時stack2的棧頂元素就是隊首元素

return stack2.pop();}}

}

測試**,如下:

/**

* 使用兩個棧實現佇列測試方法

*/public static void queuewithtwostackstest()

}

題目:如何使用兩個佇列來實現乙個棧

思路:假設用來實現棧的兩個佇列分別為queue1和queue2,確保總有乙個佇列是空的

入棧演算法:

如果queue1為空,則對queue2執行入隊操作

否則就對queue1執行如對操作

出棧演算法:

從有元素的佇列移動n-1個元素到另乙個佇列,刪除當前佇列的最後乙個元素,即可完成出棧

如果queue1非空,那麼從queue1移動n-1個元素到queue2中,然後對queue1的最後乙個元素執行出隊操作;

如果queue2非空,那麼從queue2移動n-1個元素到queue1中,然後對queue2的最後乙個元素執行出隊操作;

/**

* 使用兩個佇列來實現乙個棧

* @param

*/public class

stackwithtwoqueues

/**

* 判斷棧是否為空

* @return true 是空棧 false 不是空棧

*/public boolean isempty()

/*** 入棧

* 向非空的佇列新增資料

* @param data 入棧元素

*/public void push(anytype data) else

}/**

* 出棧

* @return 出棧元素

*/public anytype pop()

return queue2.dequeue();

} else

return queue1.dequeue();}}

}

測試**,如下:

/**

* 使用兩個佇列來實現乙個棧的測試類

*/public

static

void

stackwithtwoqueuestest()

}

資料結構與演算法(一) 佇列

佇列是一種特殊的線性表。佇列元素的進出遵循 先進先出 原則 即只允許在前端 front 也就是隊頭進行刪除操作,而只能在後端 rear 也就是隊尾進行插入操作。如圖所示 author huang date 2020 06 11 16 28 description 用陣列模擬佇列 public cla...

資料結構與演算法(13) 佇列

定義 佇列是一種只能在一端插入 隊尾 在另一端刪除 隊首 的有序線性表。佇列的第乙個插入的元素也是第乙個被刪除的元素。所以,佇列是一種先進先出 fifo,first in first out 或後進後出 lilo,last in last out 線性表。佇列操作的專有名稱 向佇列中插入乙個元素,稱...

資料結構與演算法 6 佇列

引導 今天我們進入最後一章資料結構的學習 佇列。通過前面幾篇的學習,我們已經了解到了陣列,鍊錶,棧等資料結構。資料結構就是堆特定問題進行抽象話的東西,內容並不多。後面就開始介紹利用這些基礎的資料結構加上演算法來解決特定的問題。佇列佇列和棧都是抽象的資料結構,是乙個操作受限的線性表。它的特點就是先進先...