棧和佇列面試題 使用兩個棧實現乙個佇列

2021-08-25 11:49:18 字數 1499 閱讀 7729

思路:

設棧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 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...