java实现栈结构解析

来源:互联网 发布:linux查找软件命令 编辑:程序博客网 时间:2024/06/11 15:37

学习数据结构的时候,大多数我们使用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来记录栈顶,每次构造新节点的时候,同时把当前的栈顶元素传进去,相当于虽然是尾插法插入元素,但是被插入的元素有一个记录下当前栈顶的引用,以此来方便出栈时候的操作。

0 0