考察棧和佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
1、基礎概念
參考:棧:限定只在表尾進行刪除插入操作的線性表。
返回:**1《-**2《-**3
我們把允許刪除的一端稱為棧頂(top),另一端稱為棧底(bottom).不含任何資料元素的棧稱為空棧
棧又稱為後進先出(last in first out)的線性表
注意了,我們說,棧是限定了,只能在表尾進行刪除插入操作的線性表。這裡所說的表尾,是指棧頂,而不是棧底
棧頂top,不能超過我們的陣列長度。當棧存在乙個元素時,我們定義top指向0.當棧為空時,我們定義top指向-1;
佇列是只允許在一端進行插入操作、而在另一端進行刪除操作的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。它是一種特殊的線性表,特殊之處在於它只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。
先進先出
2、c++ 實現
思路一
入棧元素分別為6,5,4,3,2,1;先棧a所有元素出棧,併入棧到棧b,然後棧b元素出棧順序為6,5,4,3,2,1;符合佇列先進先出原則;
關鍵**
if (s2.empty)
//出隊操作
void dequeue(stack&s1, stack&s2, int &m) sqstack;
//進棧操作
status push(sqstack *s, selemtype)
//出棧操作
status pop(sqstack *s, selemtype)
#include#include#includeusing namespace std;
/*-------test for stack-----
input number:
4 4 5 6 7 8 1 23 45 56
#the stack has 10numbers. they are
5645231876544
now the size is0
請按任意鍵繼續. . .*/
int main()
cout << "the stack has " << s.size() << " numbers. they are"<< endl;
while(!s.empty())
cout << "\nnow the size is "<< s.size() << endl;
system("pause");
}
4、python實現
# -*- coding:utf-8 -*-
class solution:
def __init__(self):
self.stack1 =
self.stack2 =
def push(self, node):
# write code here
def pop(self):
# return xx
if self.stack2 == :
while self.stack1:
a = self.stack1.pop() #獲取list最後乙個後刪除該數
if self.stack2: # stack2 非空 5,4,3,2,1
return self.stack2.pop() # 返回 1,2,3,4,5 實現佇列先進先出
兩個棧實現乙個佇列和兩個佇列實現乙個棧
stack 後進先出 lifo 是在表的一端進行插入或刪除運算的線性表,我們把插入 刪除的這一端稱為棧頂 top 另一端稱為棧底 bottom e push e item 把元素壓入棧頂並返回此元素 e pop 移除棧頂元素並返回此元素 e peek 檢視棧頂元素而不移除它 boolean empt...
兩個棧實現乙個佇列和兩個佇列實現乙個棧
棧的特性 先進後出 filo 佇列的特性 先進先出 fifo 1 兩個棧實現乙個佇列 1 思路 入棧時,直接壓入棧1中 如果棧1滿了,判斷棧2是否為空,若為空,則將棧1元素全部倒入棧2,再入棧 若棧2不為空,則不能再入元素 出棧時,判斷棧2是否為空,若棧為空,則將棧1中的元素倒入棧2,否則直接彈出棧...
兩個棧實現乙個佇列和兩個佇列實現乙個棧
在這裡我們先說明一下,我們在此 中用到的棧和佇列都是stl庫中實現的 思路 兩個棧,stark1和stark2,將stark1作為儲存空間,stark2作為零時快取區。入隊時,將入隊元素全部壓入stark1中即可。出隊時,將stark1中的元素全部pop出來壓入stark2中,然後在全部pop出來就...