5 棧和佇列 兩個棧實現乙個佇列

2021-09-22 22:41:52 字數 2002 閱讀 3738

考察棧和佇列

用兩個棧來實現乙個佇列,完成佇列的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出來就...