思路,現在設有倆個棧s1,s2。完成乙個佇列。
入隊時,資料進入棧s1。
出隊時檢查s2棧是否為空,為空則將s1出棧,出棧資料依次入棧s2。完成乙個s1全部出棧後,s2出棧既是此時的出隊操作。
如果s2不為空,那s2直接出棧。如果s2,s1都為空,此時隊列為空,無法執行出隊操作。**如下。
/**
*@filename seqstack.c
*@author haohaibo
*@data 2017/4/15
*@brief 倆個棧實現乙個佇列
*/#include #include #include #define n 100
typedef int datatype_t;
typedef struct seqstack_t;
typedef struct stackqueue_psq_t;
/** *@brief 建立乙個空的棧
*/seqstack_t *seqstack_creat()
bzero(s,sizeof(seqstack_t));
s->top=-1;
} /**
*@brief 清空棧
*/void seqstack_clear(seqstack_t *s)
/** *@brief 棧滿
*/datatype_t seqstack_full(seqstack_t *s)
else
return (datatype_t)0;
}/**
*@brief 棧空
*/datatype_t seqstack_empty(seqstack_t *s)
else
return (datatype_t)0;
}/**
*@brief 入棧
*/datatype_t seqstack_insert(seqstack_t *s,datatype_t value)
/** *@brief 出棧
*/datatype_t seqstack_out(seqstack_t *s)
/** *@brief 列印棧資料
*/datatype_t seqstack_show(seqstack_t *s)
/** *@brief 建立乙個空棧佇列
*/sq_t *stackqueue_create()
//sq->front->top=sq->real->top=-1;
return sq;
}/**
*@brief 入隊
*/int push(sq_t *sq,int value)
/** *@brief 出隊
*/datatype_t pop(sq_t *sq)
} return seqstack_out(sq->front);
}/**
*@brief 列印佇列
*/void stackqueue_show(sq_t *sq)
int main(void)
用倆個棧實現佇列
棧 佇列 一 題目 感謝 提供的題目 用倆個棧實現佇列。某佇列的宣告如下 templateclass cqueue cqueue void deletehead remove a element from head private stackm stack in stackm stack out 分...
用倆個棧實現佇列
思路 棧是先進後出的,佇列是先進先出的,所以要想讓先壓進棧的元素先出來,只通過乙個棧是實現不了的,但我們可以通過將棧1的資料取出再壓入棧2中,這樣在棧1底部的 也就是先壓棧的 資料就會到棧2的頂部,再將其取出,就可以實現佇列先進先出了。include include include using na...
兩個佇列實現乙個棧(C語言)
本題的思路是先建立queue1和queue2,入棧時直接向queue1里入佇列,出棧時需要先從queue1中出佇列的同時把數依次進入queue2,直到queue1中到最後乙個數為止,然後將queue1中的數出佇列,再將queue2中的數倒回queue1,這樣就實現了乙個棧。實現 如下 兩個佇列實現乙...