数据结构(Java)---栈

来源:互联网 发布:youtube显示无网络连接 编辑:程序博客网 时间:2024/06/05 10:50

栈是一种特殊的线性表,栈的插入和删除只能在表的尾端进行。栈是一种后进先出(Last In First Out)的线性表。


栈的抽象数据类型:

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() ;//删除栈顶元素    public void display();}

栈分为顺序栈和链栈

顺序栈

顺序栈是通过数组来实现的

public class SqStack implements IStack{    private int top;//top为指向下一个存储单元的位置    private Object[] stackElem;    public SqStack(int maxSize){         top=0;        stackElem=new Object[maxSize];    }    public void clear(){        top=0;    }    public boolean isEmpty(){        return top==0;    }    public int length(){        return top;    }    public Object peek(){        if(!this.isEmpty())            return this.stackElem[top-1];        return null;    }    public void push(Object x)throws Exception{        if(top==stackElem.length)            throw new Exception("栈已满");        stackElem[top]=x;        top++;    }    public Object pop() {        if(this.isEmpty())            return null;        return stackElem[--top];    }    public void display(){        for(int i=top-1;i>=0;i--)            System.out.print(stackElem[i].toString()+" ");        System.out.println();    }}

链栈

因为链栈不存在任意位置的插入和删除操作,所以并不需要头结点

class Node{       //结点类    public Object data;    public Node next;    public Node(){        this.data=null;        this.next=null;    }    public Node(Object data){        this.data=data;        this.next=null;    }    public Node(Object data,Node next){        this.data=data;        this.next=next;    }}public class LinkStack implements IStack{    private Node top;    public LinkStack(){        top=new Node();    }    public void clear(){        top=null;    }    public boolean isEmpty(){        return top==null;    }    public int length(){        int length=0;        while(top!=null){            length++;            top=top.next;        }        return length;    }    public Object peek(){        if(!this.isEmpty())            return top.data;        return null;    }    public void push(Object x){        Node p=new Node(x);        p.next=top;        top=p;    }    public Object pop(){        if(this.isEmpty())            return null;        Object p=top.data;        top=top.next;        return p;    }    public void display(){        while(top!=null){            System.out.print(top.data+" ");            top=top.next;        }        System.out.println();    }}
原创粉丝点击