今天继续说栈,关于怎么实现栈的一个简单问题。
用数组实现一个栈。
其实这一题也就是问栈到底是怎么实现的。
主要就是将对栈的几个方法转化成对数组的处理,比如入栈
就是添加数组数据,出栈
就是返回数组最后一个数据。
要注意的就是数组的大小是需要初始化的时候申请的,所以当栈满了时候,就要对数组进行扩容
,然后再入栈。
public class ArrayStack {
// 数组
private String[] items;
// 栈中已有元素个数
private int count;
// 栈(数组)的大小
private int n;
// 初始化数组
public ArrayStack(int n) {
this.items = new String[n];
this.n = n;
this.count = 0;
}
//返回栈顶元素
public String peek() {
String t = null;
if (count > 0)
t = items[count-1];
return t;
}
// 入栈
public boolean push(String item) {
//判断是否扩容栈
expandCapacity(count + 1);
System.out.println("count="+count+"n="+n);
items[count] = item;
count++;
return true;
}
// 出栈
public String pop() {
if (count == 0) return null;
String tmp = items[count-1];
count--;
return tmp;
}
// 扩大容量
public void expandCapacity(int size) {
if (size > n) {
//每次扩容50%
n = size * 3 / 2 + 1;
items = Arrays.copyOf(items, n);
}
}
}
O(1)
O(1)
。扩容情况下用到的方法是copy,所以需要移动所有的数据,时间复杂度为O(n)
扩容情况下空间复杂度为O(n)
https://time.geekbang.org/column/article/41222
感谢大家的阅读,有一起学习的小伙伴可以关注下公众号—
码上积木
❤️❤️ 每日三问知识点/面试题,积少成多。