Java数据结构--自定义栈

    xiaoxiao2021-03-25  114

    数据结构是相互之间存在一种或多种特定关系的数据元素的集合。其中关系是指数据元素之间的逻辑关系,即逻辑结构。

    数据结构和算法是计算机科学的两大支柱,是程序设计的基础。

    例如栈,只有先了解了它的结构、原理才能更好的使用它去编程

    栈是限定仅在表尾进行插入或删除操作的线性表。表尾端称为栈顶,相应地,表头端称为栈底。不含元素的空表称为空栈

    栈的特性是先进后出(FILO),后进先出(LIFO)

    我用了两种方法定义栈,数组和链式结构

    数组---栈是长度可变的,而数组的长度是定长的,所以就可以运用自定义的长度可变数组来做(详细看我的上一篇)

            每次数据入栈时,数据直接加到数组的尾部,数据出栈时,直接删除数组的最后一个数据

    public class MyStack<E> { private int num;//栈中数据的数量 private int rongliang; private int zengliang; //定义一个原数组 //用E是后面会出错,而Object类包含所有的类型,所以定义数组是用Object类 private Object[] src; //三个不同的构造方法 public MyStack(){ this(10,10); } public MyStack(int rongliang){ this(rongliang,10); } public MyStack(int rongliang,int zengliang){ this.rongliang = rongliang; this.zengliang = zengliang; src = new Object[rongliang]; } //将数据压入栈中 public void push(E e){ if(num>=src.length){ Object[] arr = new Object[src.length+zengliang]; System.arraycopy(src, 0, arr, 0, num); src = arr; } src[num++] = e; } //查看栈顶的数据 public E get(){ return (E) src[num-1]; } //弹出栈顶的数据 public E pop(){ System.arraycopy(src, 0, src, 0, num-1); num--; return (E)src[num]; } // 判断栈是否为空 public boolean isEmpty() { return src.length == 0; } //获得栈的大小 public int size(){ return num; } } 链式结构--栈的长度可变,链表的长度也可变

            放入数据时,直接将新放入的数据作为链表的头,将原先放进去的向后移,而且删除数据时,删除链表的头部会更容易,所以入栈放数据时,倒着放进去,即将链表的头当做栈的尾端(即栈顶)

    public class MyStack<E> { // 定义一个长度是0的链表 Node top = null; int num;// 结点个数 // 将数据压入栈中 public void push(E e) { // 创建结点对象 Node n = new Node(e); // 每次都将新的结点作为新的头结点 n.next = top; top = n; num++; } // 查看栈顶的数据 public E get() { return top == null ? null : top.e; } // 弹出栈顶的数据 public E poll() { if (top == null) { return null; } // 如果头结点存在,就取出并移除头结点 Node n = top; top = n.next; n.next = null; num--; return n.e; } // 判断栈是否为空 public boolean isEmpty() { return num == 0; } //获得栈的大小 public int size(){ return num; } // 链式结构的结点类 private class Node { E e; Node next; public Node(E e) { this.e = e; } } }

    转载请注明原文地址: https://ju.6miu.com/read-22990.html

    最新回复(0)