用兩個佇列->棧。始終保持乙個佇列是空的(用來倒資料),入資料時往非空的那個隊列入,出資料時將非空佇列中n-1個資料倒在空佇列中,令最終剩的那個資料出去。這樣就模擬出棧的思想。由於對於佇列來說,倒一次資料並不改變原資料的順序,因此每次出資料都要倒一次,而不像兩個棧實現佇列,兩個棧只要倒一次資料就可以實現佇列的思想。
需要注意的是,在c語言中,假定我們已經實現了佇列queue的定義,以及其介面的基本實現。
typedef struct
mystack;
void mystackcreate(mystack* pm)//初始化「棧」
void mystackpush(mystack* pm, int x)//入"棧",即將資料入到非空佇列中
else }
void mystackpop(mystack* pm)//出"棧",即從非空佇列倒資料到空佇列,最後乙個出
while (queuesize(noempty) > 1)//倒資料,並剩下最後乙個
queuepop(noempty);//非空佇列最後乙個元素,相當於"棧頂pop"
}//取"棧頂元素",和上乙個介面彈出棧頂元素類似,只是這個不刪
int mystacktop(mystack* pm)
while (queuesize(noempty) > 1)
int front = queuefront(noempty);
queuepush(empty, front);//將倒出來那個再插入進去
queuepop(noempty);//始終保持乙個佇列是空的,即將那個彈出去,因為它已經插入到另乙個佇列中了
return front;
}int mystackempty(mystack* pm)//判空(空返回0)
void mystackfree(mystack* pm)//釋放"棧",即釋放這兩個"佇列"
用棧實現佇列 用佇列實現棧
棧的特點 filo firstinlastout 僅能從棧頂插入,刪除元素。最基本的介面包括push 從棧頂壓入元素 pop 從棧頂彈出元素 佇列的特點 fifo firstinfirstout 僅能從隊頭刪除元素,從隊尾插入元素。最基本的介面包括enque 從隊尾插入元素 deque 從隊頭刪除元...
用棧實現佇列,用佇列實現棧。好玩!!!
因為在資料結構中,棧和佇列長得實在是太像了,將他們拿來比較是不可避免的,棧 後進先出,而佇列 先進先出。同樣是只能在一端進行操作,那麼問題來了,能相互實現?能不能得好好分析一下嘛,如果是用兩個棧來實現佇列,好像這操作可以哦。一下,你就明白!顯然用兩個棧可以實現佇列的功能,就是借助另乙個棧來中轉一下,...
232 用棧實現佇列 225 用佇列實現棧
用棧實現佇列 佇列是先進先出,實現佇列的最直觀的方法是用鍊錶。但本題是要求使用棧。本題兩個stack相互倒,負負得正 class myqueue def init self self.instack self.outstack defpush self,x def pop self if len s...