栈
public class MyStack {
private Object[] stack;
private int size;
private int capacity;
public MyStack() {
this(10);
}
public MyStack(int capacity) {
stack = new Object[capacity];
this.capacity = capacity;
}
public boolean isEmpty() {
return size == 0;
}
public Object peek() {
Object t = null;
if (size > 0) {
t = stack[size - 1];
}
return t;
}
public void push(Object o) {
if (size == capacity) {
expandCapacity(capacity > 1 ? capacity / 2 : capacity);
}
stack[size++] = o;
}
public Object pop() {
Object o = peek();
if (size > 0) {
stack[size - 1] = null;
size--;
}
return o;
}
public void expandCapacity(int newSize) {//扩容
stack = Arrays.copyOf(stack, capacity + newSize);
capacity += newSize;
}
public int length() {
return size;
}
}
测试
public class stackTest {
public static void main(String[] args) {
MyStack myStack = new MyStack();
String[] str1s = new String[]{"213","123","12311","123132"};
for (int i = 0; i < str1s.length; i++) {
myStack.push(str1s[i]);
}
System.out.println(myStack.isEmpty());
System.out.println(myStack.length());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.length());
}
}
结果:
队列
使用两个栈去实现队列
public class MyQueue {
private MyStack inStack = new MyStack();
private MyStack outStack = new MyStack();
private int size;
public MyQueue() {
}
public void push(Object o) {
inStack.push(o);
size++;
}
public Object pop() {
checkOutStack();
size--;
return outStack.pop();
}
public Object peek() {
checkOutStack();
return outStack.peek();
}
public int length(){
return size;
}
public boolean isEmpty() {
return inStack.isEmpty() && outStack.isEmpty();
}
public void checkOutStack() {
if (outStack.isEmpty()) {
while (!inStack.isEmpty()) {
outStack.push(inStack.peek());
inStack.pop();
}
}
}
}
测试
public class queueTest {
public static void main(String[] args) {
MyQueue myQueue = new MyQueue();
String[] strings = new String[]{"11","12","13"};
for (int i = 0; i < strings.length; i++) {
myQueue.push(strings[i]);
}
System.out.println(myQueue.length());
System.out.println(myQueue.pop());
System.out.println(myQueue.peek());
System.out.println(myQueue.length());
}
}
结果