通过学习自定义栈,了解栈的数据结构。
首先写一个栈的接口,描述其具有的基本功能。Stack.java
然后写一个接口的实现类,这只是其中一种实现方式。ArrayStack.java
最后写一个测试类,测试自定义栈的效果。Test.java
整个栈的实现,借助了 自定义数组 这篇文章的类。Array.java
结构如下:
Stack.java:
package algorithm;
public interface Stack
/**
* 获取栈中数据的大小
* @return
*/
int getSize();
/**
* 判断栈是否为空
* @return
*/
boolean isEmpty();
/**
* 入栈
* @param e
*/
void push(E e);
/**
* 出栈
* @return
*/
E pop();
/**
* 查看栈顶元素
* @return
*/
E peek();
}
ArrayStack.java:
package algorithm;
public class ArrayStack
private Array
/**
* 无参构造函数,调用array的无参构造函数,默认为10的 初始容量。
*/
public ArrayStack(){
array=new Array
}
/**
* 带参构造函数,指定初始容量。
* @param capacity
*/
public ArrayStack(int capacity) {
array=new Array
}
/**
* 获取栈的大小
*/
@Override
public int getSize() {
return array.getSize();
}
/**
* 判断栈是否为空
*/
@Override
public boolean isEmpty() {
return array.isEmpty();
}
/**
* 入栈
*/
@Override
public void push(E e) {
array.addLast(e);
}
/**
* 出栈
*/
@Override
public E pop() {
return array.removeLast();
}
/**
* 查看栈顶元素
*/
@Override
public E peek() {
return array.get(array.getSize()-1);
}
/**
* 重写Object的toString方法
*/
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("Stack:[");
for(int i=0;i sb.append(array.get(i)); if(i!=array.getSize()-1) { sb.append(","); } } sb.append("] top");//表明最后是栈顶。 return sb.toString(); } /** * 自有的方法,获取栈的总容量。 * @return */ public int getCapacity() { return array.getCapacity(); } } Test.java: package algorithm; public class Test { public static void main(String[] args) { Stack for(int i=0;i<5;i++) { stack.push(i); System.out.println(stack); } stack.pop(); System.out.println(stack); } } 控制台输出: