java 数据栈_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();

}

}

【备注】package com.xingej.algorithm.datastructure.stack;

/**

* java 不允许泛型数组, 因此,这里定义的MyStack不能使用的

*

* @author erjun 2017年12月6日 上午9:41:12

* @param 

*/

public class MyStack {

private T[] arr;

// 栈允许最大的存储元素个数

private int maxSize;

private int top;

public MyStack(int maxSize) {

this.maxSize = maxSize;

// 这里会报错,java不允许泛型数组

// arr = new T[];

top = -1;

}

// 插入新元素

public void push(T element) {

arr[++top] = element; // 一定先累加指针,不然会覆盖以前的数据

}

// 从栈里弹出一个元素,一定是栈的顶部

public T pop() {

return arr[top--]; // 弹出元素后,再让指针减一

}

public T peek() {

return arr[top]; // 返回当前栈的最顶部的元素

}

// 查看当前栈空间是否为空

public boolean isEmpty() {

return top == -1;

}

// 查看当前栈空间是否已经满了

public boolean isFull() {

return top == (maxSize - 1);

}

}

代码已上传到git上:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值