java栈存储_java语言实现栈的顺序存储与链式存储

本文主要向大家介绍了java语言实现栈的顺序存储与链式存储,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

/**

* 基于数组实现的顺序栈

* @param*/

public class Stack{

private Object[] data = null;

private int maxSize=0;   //栈容量

private int top =-1;  //栈顶指针

/**

* 构造函数:根据给定的size初始化栈

*/

Stack(){

this(10);   //默认栈大小为10

}

Stack(int initialSize){

if(initialSize >=0){

this.maxSize = initialSize;

data = new Object[initialSize];

top = -1;

}else{

throw new RuntimeException("初始化大小不能小于0:" + initialSize);

}

}

//判空

public boolean empty(){

return top==-1 ? true : false;

}

//进栈,第一个元素top=0;

public boolean push(E e){

if(top == maxSize -1){

throw new RuntimeException("栈已满,无法将元素入栈!");

}else{

data[++top]=e;

return true;

}

}

//查看栈顶元素但不移除

public E peek(){

if(top == -1){

throw new RuntimeException("栈为空!");

}else{

return (E)data[top];

}

}

//弹出栈顶元素

public E pop(){

if(top == -1){

throw new RuntimeException("栈为空!");

}else{

return (E)data[top--];

}

}

//返回对象在堆栈中的位置,以 1 为基数

public int search(E e){

int i=top;

while(top != -1){

if(peek() != e){

top --;

}else{

break;

}

}

int result = top+1;

top = i;

return result;

}

}

栈的链式存储结构实现:

public class LinkStack{

//链栈的节点

private class Node{

E e;

Nodenext;

public Node(){}

public Node(E e, Node next){

this.e = e;

this.next = next;

}

}

private Nodetop;   //栈顶元素

private int size;  //当前栈大小

public LinkStack(){

top = null;

}

//当前栈大小

public int length(){

return size;

}

//判空

public boolean empty(){

return size==0;

}

//入栈:让top指向新创建的元素,新元素的next引用指向原来的栈顶元素

public boolean push(E e){

top = new Node(e,top);

size ++;

return true;

}

//查看栈顶元素但不删除

public Nodepeek(){

if(empty()){

throw new RuntimeException("空栈异常!");

}else{

return top;

}

}

//出栈

public Nodepop(){

if(empty()){

throw new RuntimeException("空栈异常!");

}else{

Nodevalue = top; //得到栈顶元素

top = top.next; //让top引用指向原栈顶元素的下一个元素

value.next = null;  //释放原栈顶元素的next引用

size --;

return value;

}

}

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值