java算法系列

来源:互联网 发布:电脑自带看图软件 编辑:程序博客网 时间:2024/05/03 17:12

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];}@Overridepublic void push(Object obj) throws Exception{    //添加的时候,首先要判断栈是不是已经给满了    if (top == maxSize) {        throw new Exception("栈已经满!!!");    } else {        myStack[top] = obj;        top++;    }}@Overridepublic Object pop() throws Exception{    //如果栈为空的时候抛出异常    if (isEmpty()) {        throw new Exception("栈为空!!!");    }else{        top--;        return myStack[top];    }}@Overridepublic Object getTop() throws Exception{    if (isEmpty()) {        throw new Exception("栈为空!!!");    }else{        return myStack[top--];    }}@Overridepublic boolean isEmpty() {    return top == 0 ?true:false;}

}


public class TestMyStack {

@Testpublic 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()+" ");    }}

}

0 0