思路:
設棧1的棧頂=隊尾;
棧2 的棧頂 = 隊頭;
入隊:資料放在棧1
出隊:檢測棧2 是否有資料 有:出棧 沒有:將棧1 的資料匯入棧2出棧
取隊頭:取棧2的棧頂 檢測棧2 是否有資料 有:返回棧頂元素 沒有:將棧1 的資料匯入棧2出棧
取隊尾:取棧1的棧頂 檢測棧1 是否有資料 有:返回棧頂元素 沒有:將棧2 的資料匯入棧1出棧
佇列中元素的個數:棧1 中元素個數 +棧2 中元素個數
**:
typedef
struct stack
stack;
typedef
struct queueby2stack
queueby2stack;
void queueby2stackinit(queueby2stack* qlist);//初始化
void queueby2stackpush(queueby2stack* qlist, qdatatype data);//入隊
void queueby2stackpop(queueby2stack* qlist);//出隊
qdatatype queueby2stackfront(queueby2stack* qlist);//取隊頭
qdatatype queueby2stackback(queueby2stack* qlist);//取隊尾
int queueby2stacksize(queueby2stack* qlist);//隊大小
int queueby2stackempty(queueby2stack* qlist);//是否為空
void queueby2stackinit(queueby2stack* qlist)
void queueby2stackpush(queueby2stack* qlist, qdatatype data)
void queueby2stackpop(queueby2stack* qlist)
stackpop(&qlist->s2);
}else
stackpop(&qlist->s1);
}}qdatatype queueby2stackfront(queueby2stack* qlist)
return stacktop(&qlist->s2);
}else
}qdatatype queueby2stackback(queueby2stack* qlist)
return stacktop(&qlist->s1);
}else
return stacktop(&qlist->s1);
}int queueby2stacksize(queueby2stack* qlist)
int queueby2stackempty(queueby2stack* qlist)
上面**,有些棧的基本操作沒有給出,可以自己補充完整,也可以去後幾篇中的棧的基本操作中找。 面試題 兩個佇列實現棧
兩個佇列實現棧 前提已知 typedef struct queue queue void initqueue queue q void enqueue queue q,int key int dequeue queue q int sizeofqueue queue q int isqueueemp...
面試題(兩個棧實現乙個佇列和兩個佇列實現乙個棧)
面試題 判斷元素出棧入棧順序的合法性。面試題 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 我們知道棧是後進先出的,而佇列是先進先出的 我們建立兩個棧input 輸入棧 output 輸出棧 我們用input 輸入棧 來負責入隊,而output 輸...
面試題7 兩個棧實現佇列
已知下面stack類及其3個方法push pop和 count,請用2個stack實現queue類的入隊 enqueue 出隊 dequeue 方法。class stack class queue 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...