Java数据结构之栈

package com.xingej.algorithm.datastructure.stack;

/**
 * 数据结构之栈Stack
 * 
 * 以long类型为测试用例
 * 
 * @author erjun 2017年12月4日 下午10:22:34
 */
public class LongStack {
    // 底层数据存储
    private long[] arr;

// 最大元素数量
    private int maxSize;

// 当前元素的指针
    private int top;

public LongStack(int maxSize) {
        this.maxSize = maxSize;
        arr = new long[maxSize];
        top = -1;// 默认值为-1,栈里没有元素
    }

// 添加数据
    public void push(long value) {
        arr[++top] = value;
    }

// 查看、并删除元素数据
    public long pop() {
        return arr[top--]; // 先返回,然后,指针再减一
    }

// 仅仅查看元素
    public long peek() {
        return arr[top];
    }

// 查看当前栈空间是否为空
    public boolean isEmpty() {
        return top == -1;
    }

// 查看当前栈空间是否已经满了
    public boolean isFull() {
        return top == (maxSize - 1);
    }

}

测试用例:

package com.xingej.algorithm.datastructure.stack;

import org.junit.Test;

/**
 * 栈的特点:先进后出;
 * 
 * 栈和队列的区别?
 * 
 * 栈的主要组成:一个存数据的容器,如数组,或者链表;一个指针;其他API行为都是围绕容器进行的
 * 
 * 队列的主要组成:一个存数据的容器,如数组,或者链表;两个指针。
 * 
 * 不适合大量存储,只是实现某种算法的一种手段吧,
 * 
 * 受限访问方式
 * 
 * @author erjun 2017年12月6日 上午9:11:40
 */
public class LongStackTest {

    @Test
    public void test() {
        LongStack theStack = new LongStack(10);

        theStack.push(29);
        theStack.push(2);
        theStack.push(9);
        theStack.push(5);

        while (!theStack.isEmpty()) {
            System.out.print(theStack.pop() + " ");
        }
        System.out.println();

    }

}

代码已上传到git上:

https://github.com/xej520/xingej-algorithm

时间: 2024-08-06 11:55:08

Java数据结构之栈的相关文章

java 数据结构 栈的实现

java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ Node tail = new Node(); Node nowNode = new Node(); //永远指向栈顶 int size; Stack(){}; Stack(String date){ this.tail.date = date; this.tail.next = null; this.

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

java数据结构栈

栈的原则是先进后出,比如一堆摞起来的书,后放上去的会被最先拿到. 栈的特点是每次只允许访问一个元素. 栈是一种抽象出来的数据结构,它的底层存储依赖于数组和链表,下面列出它的两种实现 public interface Stack <T>{ boolean isEmpty(); void clear(); int length(); boolean push(T obj); T pop(); boolean hashNext(); } public class ArrayStack<T>

java数据结构与算法之栈(Stack)设计与实现

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53362993 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈设计与实现 ??本篇是jav

java数据结构——栈

学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指针来对其进行操作 * 栈的重要数据特性————先进后出(后进先出) * 压入.弹出.访问.是否空.是否满 */ public class Stack { private long arr[]; private int top;// 指针 public Stack(int Maxsize) {// 构

Java数据结构和算法(四)——栈

stack,中文翻译为堆栈,其实指的是栈,heap,堆.这里讲的是数据结构的栈,不是内存分配里面的堆和栈. 栈是先进后出的数据的结构,好比你碟子一个一个堆起来,最后放的那个是堆在最上面的. 队列就是排队买苹果,先去的那个可以先买. 栈 public class Stack { private int array[]; private int max; private int top; public Stack(int max){ this.max = max; array = new int[m

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

java堆和栈的区别

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引

Java数据结构和算法(二)——数组

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是