首页 课程 师资 教程 报名

Java编程基础之数据结构栈

  • 2020-07-20 16:24:10
  • 2103次 动力节点

栈:一种仅允许在一端进行插入和删除操作的线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表(LIFO,Last In First Out)。

栈一次只允许操作一个数据项,即最后插入的数据项。

下面是用Java数组实现的顺序存储结构的栈。

package cn.zhf.list;
 class MyStack {
    private int maxSize;//定义栈的最大容量
    private int[] stackArray;//以数组方式存储元素
    private int top;//栈顶
 
    //构造器,初始化
    public MyStack(int x){
        maxSize = x;
        stackArray = new int[x];
        top = -1;
    }
    //插入元素
    public void push(int x){
        stackArray[++top] = x;
    }
    //删除顶部元素
    public int pop(){
        return stackArray[top--];
    }
    //查看栈顶部元素
    public int peek(){
        return stackArray[top];
    }
    //判断栈是否为空
    public boolean isEmpty(){
        return (top == -1);
    }
    //判断栈是否已满
    public boolean isFull(){
        return (top == maxSize-1);
    }
}

下面是使用链表实现的栈。

package cn.zhf.list;
//链表内存放的数据对象包装
public class Link {
    public int idata;//存放int 类型的数据
    public double ddata;//double类型的数据
    public Link next;//对下一个Link对象的引用
    public Link(int id, double dd) {
        idata = id;
        ddata = dd;
    }
    public void diaplay() {
        System.out.println(idata + "," + ddata);
    }
}
//链表
public class LinkList {
    private Link first;//链表中保存的数据
    public LinkList() {
        first = null;
    }
    public boolean isEmpty() {
        return (first == null);
    }
    //插入一个元素
    public void insertFirst(int id, double dd) {
        Link link = new Link(id, dd);
        link.next = first;//next元素链接first
        first = link;//first元素链接link
    }
    //删除一个元素
    public Link deleteFirst() {
        Link temp = first;
        first = first.next;
        return temp;
    }
    //显示链表的元素
    public void displayLink() {
        Link current = first;
        while (current != null) {
            current.diaplay();
            current = current.next;
        }
    }
}
//用链表实现的栈
public class LinkStack {
        private LinkList list;
        public LinkStack(){
            list = new LinkList();
        }
        public void push(int id,double dd){
            list.insertFirst(id, dd);
        }
        public Link pop(){
            return list.deleteFirst();
        }
        public boolean isEmpty(){
            return list.isEmpty();
        }
        public void display(){
            list.displayLink();
        }
    public static void main(String[] args) {
        LinkStack ls = new LinkStack();
        ls.push(1, 2.1);
        ls.push(2, 2.2);
        ls.push(3, 2.3);
        ls.display();
                ls.pop();
                ls.display();
    }
 
}

栈中的基本操作是:入栈、出栈和查看栈顶元素,以上两种实现方式不一样,但是方法名一样,实现的功能也相同,因此可以将Stack定义为一个接口,两个类分别实现这个接口,这样,对于调用者完全隐藏了实现的细节,但不影响使用,这大概就是接口的抽象优势。

Java编程基础之数据结构栈

以上就是动力节点java培训机构的小编针对“Java编程基础之数据结构栈”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交