java实现栈结构解析

学习数据结构的时候,大多数我们使用C或C++来编程,因为C或C++中有指针和地址,有一次上实验课检查学生的实验时候,检查到一同学使用JAVA实现的,当时的第一反应是问他是不是使用JAVA中的容器实现的,因为JAVA中有相应的Stack类,他说不是,所以认真的检查了他的实现,发现其实即使使用JAVA自己去实现这个结构也是很简单的,不过需要弄清楚一些关系,比如对于对象的引用其实质就是C中说的指针

实现栈之前我们需要定义一个类(程序一所示)来存储栈的节点信息,类似C中说的Struct结构体。关于这个节点类有

程序一:

class Node<T>{
T data;//记录节点的数据
Node<T> top;//记录指向此节点的那个节点元素,相当于记录当前节点的前一个节点信息。
public Node() {
this.data = null;
this.top = this;
}
Node(T data, Node<T> node){
this.data = data;
this.top = node;
}
}

在C语言中我们使用Struct结构体定义数据如程序二所示

程序二:

struct node{

int data;

struct node *next;//记录下一个元素的指针

}nodes;


程序一中我们使用泛型来扩大程序的试用范围,从中也可以发现利用JAVA实现的好处,提高代码的复用性,不然像C语言中如果数据存储的为整形,我们需要定义data为整形,如果数据类型换为浮点型,定义的结构体就无法试用,需要重新定义过。


程序三:

public class Stack<U> {
private Node<U> stack = new Node<U>();//调用生成节点的默认构造函数来生成

void push(U data){
stack.top = new Node<U>(data, stack.top);//构造插入节点的时候,同时把栈顶元素传进去,这样在出栈的时候可以找到出栈元素所指向的前节点元素
}
U pop(){
U result = stack.top.data;
if(!this.end()){
stack.top = stack.top.top;
}
return result;
}
boolean end(){
return stack.top.data == null;
}

}


程序三中定义了一个栈,其中定义一个全局变量stack来记录栈顶,每次构造新节点的时候,同时把当前的栈顶元素传进去,相当于虽然是尾插法插入元素,但是被插入的元素有一个记录下当前栈顶的引用,以此来方便出栈时候的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值