leetcode1381
这道题总的来说比较简单,就是实现栈这个数据结构,那么先复习一下什么叫栈
栈
栈只允许新的内容从一个方向插入或删除,这个方向我们叫栈顶,而从其他位置获取内容是不被允许的
栈最显著的特征就是LIFO(Last In, First Out - 后进先出)
常用操作
- 进栈 - push - 将元素放置到栈顶
- 退栈 - pop - 将栈顶元素弹出
- 栈顶 - top - 得到栈顶元素的值
- 是否空栈 - isEmpty - 判断栈内是否有元素
代码实现
定义一个指针rear,用来表示栈尾的数组下表 使用数组模拟栈
rear<maxsizi-1,表示栈未满,可以加元素,否则不做任何处理
我是用数组模拟栈,用链表来模拟大家也可以试着实现一下
class CustomStack {
private int maxsize;//栈的大小
private int[] stack;
private int rear = -1;//栈尾指针,开始指向-1
public CustomStack(int maxSize) {
maxsize = maxSize;
stack = new int[maxsize];//模拟栈
}
public void push(int x) {
if (rear < maxsize - 1) {//栈未满,先把指针+1,再往里添加新元素
rear++;
stack[rear] = x;
}
}
public int pop() {
if (rear < 0) return -1;//判断是否为空
int popnum = stack[rear];//不为空,先定义一个中间变量存当前值,指针往前移动一位
rear--;
return popnum;//返回中间变量
}
public void increment(int k, int val) { //判断k和栈当前大小的关系
if (k > stack.length) {
for (int i = 0; i < stack.length; i++) {
stack[i] += val;
}
} else {
for (int i = 0; i <= k-1; i++) {
stack[i] += val;
}
}
}
@Override
public String toString() { //便于调试重写的toString方法
return "CustomStack{" +
"maxsize=" + maxsize +
", stack=" + Arrays.toString(stack) +
", rear=" + rear +
'}';
}
}