C C 用佇列實現棧

2021-09-23 18:54:24 字數 898 閱讀 3158

思路:我們都知道棧是先進後出,佇列是先進先出,那麼我們只需要用佇列模擬出先進後出的效果就行了

先定義棧

class mystack

int pop();

void push(int d);

void swap(queue** v1,queue** v2);

private:

queue* q1;

queue* q2;

};

實現入棧操作,我們定義了兩個佇列,假設q1是存放資料的,q2是為了實現操作開的輔助佇列,那麼入棧操作往q1插入資料就行了

void mystack::push(int d)

實現出棧操作,1.(狀態:q1有資料,q2為空)我們可以將q1中的資料出佇列並放入q2佇列中直到只剩乙個資料,因為佇列是先進先出的,那麼這個資料就是最後乙個入隊的資料,我們將這個資料出隊就模擬了出棧效果.2.顯然此時q1為空,q2存著剩下的資料,假設我們要進行入棧操作,上面的**也寫了,入棧是直接往q1插入資料,這樣肯定是不正確的,不然我們緊接著進行出棧操作,該怎麼做?將q1中的資料出佇列?,這就和上面的操作不統一了,所以此時我們應該將q1和q2交換一下,讓q1指向q2,q2指向q1,這樣q1中是剩下的資料,q2為空和剛開始的狀態是一樣的,此時我們再進行出棧操作就回到了"1"。

int mystack::pop()

int t = q1->front();

q1->pop();

swap(q1,q2);

return t;

}

交換

void mystack::swap(queue** v1,queue** v2)

用棧實現佇列 用佇列實現棧

棧的特點 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...