面試題9 用兩個棧實現佇列

2021-10-02 17:49:22 字數 2013 閱讀 4452

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別

/*

入隊:將元素進棧stack1

出隊:判斷棧stack2是否為空,如果為空,則將棧stack1中所有元素彈出pop,

並push進stack2,stack2出棧;如果不為空,棧stack2直接出棧。

即:棧a用來作入佇列

棧b用來出佇列,當棧b為空時,棧a全部出棧到棧b,棧b再出棧(即出佇列)

*/class

solution

intpop()

} b = stack2.

top();

stack2.

pop();

return b;

//}//else

}private

: stack<

int> stack1;

stack<

int> stack2;

};

leecode:

class

cqueue

void

(int value)

intdeletehead()

}}b = s2.

top();

s2.pop();

return b;

}private

: stack<

int> s1;

stack<

int> s2;

};

拓展1:佇列中元素為任意值

template

<

typename t>

class

cqueue

;template

<

typename t>

void cqueue::(

const t& element)

//尾插

template

<

typename t>

t cqueue

::deletehead()

} t head = stack2.

top();

stack2.

pop();

if(stack2.

size()

==0)//當stack2為空時,拋異常

throw

newexception

("queue is empty");

return head;

}

拓展2:用兩個佇列實現乙個棧的功能?要求給出演算法和思路!

《分析》:

入棧:將元素進佇列a,資料的插入原則:保持乙個隊列為空,乙個佇列不為空,往不為空的佇列中插入元素

出棧:判斷佇列a中元素的個數是否為1,如果等於1,則出佇列,否則將佇列a中的元素 出隊並放入佇列b,直到佇列a中的元素留下乙個,然後佇列a出佇列,再把 佇列b中的元素出佇列以此放入佇列a中。

template

<

typename t>

class

cstack

;template

<

typename t>

void cstack::(

const t& node)

//實現棧元素的插入

else

}template

<

typename t>

t cstack

::deletehead()

//實現棧元素的刪除

ret = q1.

front()

; q1.

pop();

}else

ret = q2.

front()

; q2.

pop();

}return ret;

}

面試題9 用兩個棧實現佇列

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別 棧是保證元素後進先出,佇列保證元素先進先出,它們都只有到來先後順序 題目思路 需要用兩個棧來實現乙個佇列,乙個棧a是先進後出,將棧a中出的元素存放在棧b中,負負得正,實現佇列的先進先出功能。存入時,存在棧a,...

面試題9 用兩個棧實現佇列

二 關鍵 1.關於佇列的插入和刪除 只在stack1中插入,只在stack2中刪除。2.關於倒水操作 只在stack2為空時,把stack1中元素彈出壓倒stack2中。其他情況不進行倒水的操作。三 解釋 刪除乙個元素的步驟 當stack2不是空的時候,直接彈出stack2棧頂元素 當stack2是...

面試題9 用兩個棧實現佇列

題目 用兩個棧實現佇列。請完成再佇列尾部插入資料和頭部刪除資料的功能。思路 佇列的特點是 先進先出 若要用這兩個棧實現這個功能,則這兩個棧中乙個做主棧,乙個做輔棧。當入隊時,資料放入主棧 當出隊時,因為要實現先進入佇列的先出佇列,而棧的特點是,先進入棧的後出棧,若將主棧的資料逐一取出,放入到輔棧中,...