1、LeetCode232
// 用双栈实现队列
typedef struct {
int stackIn[100], stackOut[100];
int stackInTop, stackOutTop;
} MyQueue;
// 初始化
MyQueue* myQueueCreate() {
MyQueue *queue = (MyQueue *) malloc(sizeof(MyQueue));
queue->stackInTop = 0;
queue->stackOutTop = 0;
return queue;
}
// 入队
void myQueuePush(MyQueue* obj, int x) {
obj->stackIn[(obj->stackInTop)++] = x;
}
// 出队
int myQueuePop(MyQueue* obj) {
// 表示出队的栈的栈顶指针是否为0,为0表示栈空,现在无法出队,需要将表示入队的栈的元素转入该栈
if (obj->stackOutTop == 0) {
while (obj->stackInTop != 0) {
obj->stackOut[(obj->stackOutTop)++] = obj->stackIn[--(obj->stackInTop)];
}
}
return obj->stackOut[--(obj->stackOutTop)];
}
// 读取队头元素
int myQueuePeek(MyQueue* obj) {
if (obj->stackOutTop == 0) {
while (obj->stackInTop != 0) {
obj->stackOut[(obj->stackOutTop)++] = obj->stackIn[--(obj->stackInTop)];
}
}
return obj->stackOut[(obj->stackOutTop) - 1];
}
// 判空
bool myQueueEmpty(MyQueue* obj) {
return (obj->stackInTop == 0 && obj->stackOutTop == 0);
}
// 清空队列
void myQueueFree(MyQueue* obj) {
obj->stackInTop = 0;
obj->stackOutTop = 0;
}
2、LeetCode225
个人觉得这题用c实现没有意义,因为c可以不用很复杂,而c++有现成的封装类,这题考察的是对于类库的使用
class MyStack {
public:
queue<int> que;
MyStack() {}
void push(int x) {
que.push(x);
}
int pop() {
int num = que.size();
for (int i = 0; i < num - 1; i++) {
que.push(que.front());
que.pop();
}
int result = que.front();
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};