1、c++實現
#include#includeusing namespace std;
/*使用兩個堆疊實現佇列
s1:實現入隊,s2:實現出隊
首先,將資料存放在棧s1中,然後將資料push進s2中,再將s2中的資料pop
出佇列:
(1)如果棧b不為空,直接彈出棧b的資料
(2)如果棧b為空,則依次彈出棧a的資料,放入棧b中,再彈出棧b的資料
*/templatestruct queue
t front()
}return s2.top(); }
void pop()
}}};
2、c實現
/*
* 用兩個棧實現佇列
*/#include#includetypedef struct stack
st;/*
* 初始化指定大小的棧
*/st *initstack(int num)
s->loc=0;
s->max=num;
s->a=(int *)malloc(sizeof(int)*num);
if(s->a==null)
return s;}/*
* 判斷棧是否為空(空:返回1 非空:返回0)
*/int isstackempty(st *s)
/** 判斷棧是否為滿(滿:返回1 非滿:返回0)
*/int isstackfull(st *s)
/** 棧中元素個數
*/int getstacknum(st *s)
/** 入棧
*/void pushstack(st *s,int value)
s->a[s->loc]=value;
s->loc++;}/*
* 出棧
*/int popstack(st *s)
int temp=s->a[s->loc-1];
s->loc--;
return temp;}/*
* 檢視棧頂元素
*/int peekstack(st *s)
int temp=s->a[s->loc-1];
return temp;}/*
* 將乙個棧中的元素拷貝到另一棧中
*/void copy(st *src,st *dest)
while(isstackempty(src)!=1) }
/** 列印棧中的各個元素
*/void printstack(st *s)
while(isstackempty(s)!=1) }
/** 入佇列(入佇列的元素儲存在src中)
*/void pushqueue(st *src,st *dest,int value)
src->a[src->loc]=value;
src->loc++;}/*
* 出佇列
* (如果dest不為空,則直接從dest彈出乙個元素)
* (如果dest為空,src不為空,則先將src中的元素拷貝到dest中,在從dest中彈出乙個元素)
*/int popqueue(st *src,st *dest)
if(isstackempty(dest)!=1)
else if(isstackempty(dest)==1&&isstackempty(src)!=1) }
int main()
用兩個棧實現乙個佇列 用兩個佇列實現乙個棧
做題之前,我們先來回顧一下 棧和佇列的相同點以及不同點 便於做題時的應用!1.區別與聯絡 相同點 1 棧和佇列都是控制訪問點的線性表 2 棧和佇列都是允許在端點處進行資料的插入和刪除的資料結構 不同點 1 棧遵循 後進先出 lifo 的原則,即只能在該線性表的一頭進行資料的插入和刪除,該位置稱為 棧...
用兩個棧實現乙個佇列,用兩個佇列實現乙個棧
t deletehead 頭部刪除節點 while s1.empty t ret s2.top s2.pop return ret private stacks1 stacks2 問題2 用兩個佇列實現乙個棧 問題分析 用兩個佇列實現乙個棧,刪除時,由於佇列是先進先出的,而棧是後進先出,因此假設現在...
用兩個棧實現乙個佇列 用兩個佇列實現乙個棧
思路 棧 先進後出,佇列 先進先出 如果轉化 1.將內容先push進乙個棧instack,2.判斷outstack是否為空,空 將棧instack中的元素pop 刪除並返回陣列的最後乙個元素 並push進outstack,非空 直接出棧 3.出棧時,先push進instack先從outstack出來...