棧的特點:filo(firstinlastout)
僅能從棧頂插入,刪除元素。
最基本的介面包括push()
——從棧頂壓入元素
,pop()
——從棧頂彈出元素
佇列的特點:fifo(firstinfirstout)
僅能從隊頭刪除元素,從隊尾插入元素。
最基本的介面包括enque()
——從隊尾插入元素
,deque()
——從隊頭刪除元素
思路:新入佇列的元素壓入stack1
中,當元素出佇列時,若
stack2
為空,則將
stack1
的全部元素依次彈出,壓入
stack2
中,這樣
stack2
的棧頂元素即為隊頭元素。
templateclass myqueue
;templatevoid myqueue::move(std::stack& from, std::stack& to) }
}templatet myqueue::front()
return ele;
}templatet myqueue::back()
return ele;
}templatevoid myqueue::enque(const t& ele)
templatevoid myqueue::deque()
}
思路:新元素入棧時,若兩個佇列都為空,向任意乙個佇列隊尾插入元素,否則向其中乙個非空佇列插入元素。棧彈出元素時,將非空佇列的元素依次刪除,
插入另乙個空佇列,只留下隊尾元素(
此即棧頂元素
),彈出棧頂即從佇列中刪除此元素。
templateclass mystack
;templatet mystack::top()
else if (!queue1.empty() && queue2.empty())
return ele;
}templatevoid mystack::push(const t& ele)
else if (queue2.empty()) }
templatevoid mystack::pop()
if (!queue2.empty())
}else if (queue2.empty())
if (!queue1.empty())
}}
用棧實現佇列,用佇列實現棧。好玩!!!
因為在資料結構中,棧和佇列長得實在是太像了,將他們拿來比較是不可避免的,棧 後進先出,而佇列 先進先出。同樣是只能在一端進行操作,那麼問題來了,能相互實現?能不能得好好分析一下嘛,如果是用兩個棧來實現佇列,好像這操作可以哦。一下,你就明白!顯然用兩個棧可以實現佇列的功能,就是借助另乙個棧來中轉一下,...
232 用棧實現佇列 225 用佇列實現棧
用棧實現佇列 佇列是先進先出,實現佇列的最直觀的方法是用鍊錶。但本題是要求使用棧。本題兩個stack相互倒,負負得正 class myqueue def init self self.instack self.outstack defpush self,x def pop self if len s...
用棧實現佇列
正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。public class solution public void push int element...