java算法系列

java算法系列一栈

  1. 栈的概念
    栈是一种特殊的线性表,堆栈的数据元素以及数据元素之间的关系和线性表是完全一样的。差别是线性表是在任意位置进行插入和删除操作,栈是只允许在固定的一端进行插入和删除,栈的插入和删除只允许在栈顶,栈的插入和删除通常称为进栈和出栈。

  2. 数据集合
    每个数据元素的数据类型可以是任意的类型

  3. 操作的集合
    进栈push(obj):把数据元素obj插入到栈中。
    出栈pop() : 删除的数据元素由函数返回。
    获得栈顶元素getTop():取栈顶的数据并由函数返回。
    判断栈是不是为空isEmpty():若栈非空返回true,否则返回false。

  4. 栈的类型:
    栈的类型包括两种:顺序栈和链式栈

  5. 代码设计:
    设计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()+" ");
    }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值