列表

详情


NC298. 两个队列实现栈

描述

请你仅使用两个队列实现一个后入先出的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty),输入数据保证 pop、top函数操作时,栈中一定有元素。
void push(int element) 将元素 element 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
bool empty() 如果栈是空的,返回 true ;否则,返回 false 。

数据范围:操作数量满足,输入的元素满足

示例:
输入:    ["MTY","PSH1","TOP","MTY"]
输出:    ["true","1","false"]
解析:
"MTY"表示当前栈是不是为空=>当前为空,返回"true"
"PSH1"表示将1压入栈中,栈中元素为1
"TOP"表示获取栈顶元素==>返回"1"
"MTY"表示当前栈是不是为空=>当前不为空,返回"false"


注意:
1.你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
2.你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例1

输入:

["MTY","PSH1","TOP","MTY"]

输出:

["true","1","false"]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 5ms, 内存消耗: 648KB, 提交时间: 2022-03-07

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param element int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
#include<stdbool.h>
int data[1000];
int idx = 0;
void push(int element) {
     data[idx++] = element;
}

int pop() {
    return data[--idx];
}

int top() {
    return data[idx-1];
}

bool empty() {
    return idx == 0;
}

C 解法, 执行用时: 5ms, 内存消耗: 652KB, 提交时间: 2022-02-17

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param element int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
#include<stdbool.h>
int data[1000];
int idx = 0;
void push(int element) {
    data[idx++] = element;
}

int pop() {
    return data[--idx];
}

int top() {
    return data[idx-1];
}

bool empty() {
    return idx == 0;
}

C 解法, 执行用时: 5ms, 内存消耗: 668KB, 提交时间: 2022-06-15

#include<stdbool.h>

int a[1000], b = 0;

void push(int element) {
    a[b++] = element;
}

int pop() {
    return a[--b];
}

int top() {
    return a[b - 1];
}

bool empty() {
    return b == 0;
}

C 解法, 执行用时: 5ms, 内存消耗: 696KB, 提交时间: 2022-04-07

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param element int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
static int arry1[1000], arry2[1000];
static int i = 0;
void push(int element) {
    arry1[i++] = element;
}

int pop() {
    return arry1[--i];
}

int top() {
    return arry1[i-1];
}

bool empty() {
    return (i == 0) ? true : false;
}

C 解法, 执行用时: 5ms, 内存消耗: 764KB, 提交时间: 2022-02-17

#include <assert.h>
int i_arr[1008], idx = -1;
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param val int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 * C语言声明定义全局变量请加上static,防止重复定义
 */
void push(int val) {
    i_arr[ ++idx ] = val;
}

int pop() {
    assert(idx > -1);
    return i_arr[ idx-- ];
}

int top() {
    assert(idx > -1);
    return i_arr[idx];
}

bool empty() {
    return idx < 0;
}

上一题