java算法系列一栈
栈的概念
栈是一种特殊的线性表,堆栈的数据元素以及数据元素之间的关系和线性表是完全一样的。差别是线性表是在任意位置进行插入和删除操作,栈是只允许在固定的一端进行插入和删除,栈的插入和删除只允许在栈顶,栈的插入和删除通常称为进栈和出栈。数据集合
每个数据元素的数据类型可以是任意的类型操作的集合
进栈push(obj):把数据元素obj插入到栈中。
出栈pop() : 删除的数据元素由函数返回。
获得栈顶元素getTop():取栈顶的数据并由函数返回。
判断栈是不是为空isEmpty():若栈非空返回true,否则返回false。栈的类型:
栈的类型包括两种:顺序栈和链式栈- 代码设计:
设计MyStack接口
实现顺序栈类SequenceStack类
public interface MyStack {
//进栈
public void push(Object obj);
//出栈
public Object pop();
//获得栈顶元素
public Object getTop();
//判断栈是不是为空
public boolean isEmpty();
}
public class SequenceStack implements MyStack{
Object[] myStack;
final int defaultSize = 10;
int top;
int maxSize;
public SequenceStack(){
init(defaultSize);
}
public SequenceStack(int size){
init(size);
}
public void init(int size){
this.maxSize = size;
top = 0;
myStack = new Object[size];
}
@Override
public void push(Object obj) throws Exception{
//添加的时候,首先要判断栈是不是已经给满了
if (top == maxSize) {
throw new Exception("栈已经满!!!");
} else {
myStack[top] = obj;
top++;
}
}
@Override
public Object pop() throws Exception{
//如果栈为空的时候抛出异常
if (isEmpty()) {
throw new Exception("栈为空!!!");
}else{
top--;
return myStack[top];
}
}
@Override
public Object getTop() throws Exception{
if (isEmpty()) {
throw new Exception("栈为空!!!");
}else{
return myStack[top--];
}
}
@Override
public boolean isEmpty() {
return top == 0 ?true:false;
}
}
public class TestMyStack {
@Test
public void testMyStack() throws Exception{
SequenceStack s = new SequenceStack();
s.push(new Integer(10));
s.push(new Integer(1));
s.push(new Integer(8));
s.push(new Integer(7));
s.push(new Integer(5));
while (!s.isEmpty()) {
System.out.print(s.pop()+" ");
}
}
}