package 栈;
/*
* 栈就是特殊的线性表。
*/
public interface Stack<E> {
public int getSize();
public boolean isEmpty();
public void push(E e);//进栈
public E pop();//弹栈
public E peek();//出栈
public void clear();
}
二
package 栈;
import 栈.Stack;
import 顺序表.ArrayList;;
/*
* 顺序栈和顺序表很像,当顺序表对表尾进行操作的时候,就叫顺序栈,
* 对一端进行操作,可以用顺序表进行拓展。
* 栈是先进后出。
* 顺序栈栈也是一种特殊的线性表,是有限的序列。
*/
public class ArrayStack<E> implements Stack<E> {
private ArrayList<E> list;
public ArrayStack() {
this(10);
}
public ArrayStack(int capacity) {
list = new ArrayList<>(capacity);
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return list.getSize();
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return list.isEmpty();
}
@Override
public void push(E e) {
// TODO Auto-generated method stub
list.addLast(e);
}
@Override
public E pop() {
// TODO Auto-generated method stub
return list.removeLast();
}
@Override
public E peek() {// 查询栈顶元素
// TODO Auto-generated method stub
return list.getLast();
}
@Override
public void clear() {
// TODO Auto-generated method stub
list.clear();
}
// 定义成员函数
public int getCapacity() {
return list.getCapacity();
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder str = new StringBuilder();
if (isEmpty()) {
str.append(String.format("顺序栈:bottom[]top***%d/%d\n", list.getSize(), list.getCapacity()));
} else {
str.append("顺序栈:bottom[");
for (int i = 0; i < list.getSize(); i++) {
if (i != list.getSize() - 1) {
str.append(list.get(i) + ",");
} else {
str.append(list.get(i) + "]top");
}
}
str.append(String.format("***%d/%d\n", list.getSize(), list.getCapacity()));
}
return str.toString();
}
}