数据结构顺序栈、链栈的java实现

本篇博文用java实现了数据结构中的顺序栈和链栈
源码分享在github:数据结构,当然你也可以从下面的代码片中获取

1.栈接口 IStack .java

public interface IStack {
    public void clear();//置空
    public boolean isEmpty();//判空
    public int length();    //返回数据元素个数
    public Object peek();   //取栈顶元素并返回其值
    public void push(Object x)throws Exception; //将数据元素压入栈顶
    public Object pop();    //删除并返回栈顶元素
}

2.顺序栈 SqStack .java

public class SqStack implements IStack{
    private Object[] stackElem;//对象数组
    private int top;//在非空栈中,top始终指向栈顶元素的下一个存储位置,当栈为空时,top值为0

    //构造函数
    public SqStack(int maxSize) {
        top = 0;
        stackElem = new Object[maxSize];//为栈分配maxSize个存储单元
    }

    //栈置空
    @Override
    public void clear() {
        top = 0;
    }

    //判断栈是否为空
    @Override
    public boolean isEmpty() {
        return top == 0;
    }

    //求栈中数据元素个数
    @Override
    public int length() {
        return top;
    }

    //取栈顶元素
    @Override
    public Object peek() {
        if(!isEmpty()){
            return stackElem[top-1];
        }else{
            return null;
        }
    }

    //入栈
    @Override
    public void push(Object x) throws Exception {
        if(top == stackElem.length)//栈满
            throw new Exception("栈已满");
        else
            stackElem[top++] = x;//先将X赋值给stackElem[top],再将top加一
    }

    //出栈
    @Override
    public Object pop() {
        if(isEmpty())
            return null;
        else
            return stackElem[--top];//先将top减一,再返回stackElem[top]的值
    }

    //输出栈中所有元素(从栈顶到栈底元素)
    public void display(){
        for(int i = top-1;i>=0;i--){
            System.out.print(stackElem[i].toString()+" ");//输出
        }
    }
}

3.链栈 LinkStack.java

public class LinkStack implements IStack {
    private Node top;//栈顶元素的引用

    //将栈置空
    @Override
    public void clear() {
        top = null;
    }

    //判断栈是否为空
    @Override
    public boolean isEmpty() {
        return top==null;
    }

    //求栈的长度
    @Override
    public int length() {
        Node p = top;
        int length = 0;
        while(p!=null){
            p  = p.next;
            ++length;
        }
        return length;
    }

    //取栈顶元素并返回其值
    @Override
    public Object peek() {
        if(!isEmpty())
            return top.data;
        else
            return null;
    }

    //入栈
    @Override
    public void push(Object x) throws Exception {
        Node p = new Node(x);
        p.next = top;
        top = p;
    }

    //出栈
    @Override
    public Object pop() {
        if(isEmpty()){
            return null;
        }else{
            Node p = top;
            top = top.next;
            return p.data;
        }
    }

    //输出栈中所有数据元素(顶到底)
    public void display(){
        Node p = top;
        while(p!=null){
            System.out.print(p.data.toString()+" ");
            p = p.next;//指针后移
        }
    }
}

4.节点类 Node.java

public class Node {
    public Object data;//存放节点值
    public Node next;//后继节点的引用

    //无参数时的构造函数
    public Node(){
        this(null,null);
    }

    //带一个参数时的构造函数
    public Node(Object data){
        this(data,null);
    }

    //带两个参数的构造函数
    public Node(Object data, Node next){
        this.data = data;
        this.next = next;
    }
}

数据结构这个系列是我学习时做的笔记,会持续更新,详见我的github(地址在文章开头)或我的其他博文,感觉不错的话,关注一下吧!

发布了34 篇原创文章 · 获赞 65 · 访问量 3738

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/103540497