之前就学过数据结构这门课,当时有用c/c++实现过线性表的顺序存储、单链表、双向链表、顺序栈、链栈、图等数据结构;学了java也有一段时间了,最近一直在为投简历求值而努力着,想着对于大公司来说,对于本科生的要求基本上都要熟悉或者掌握常用的数据结构以及算法,所以准备着重新用java实现一遍以前学过的、现在也很常用或者很常考的一些数据结构以及算法。如果大家在阅读的时候发现有什么不合理的地方,还请大家指正!
链栈的java实现
链栈的特点其实就是简化了的或者说是限制了的单链表,它要求元素只能从一端进栈和出栈,其特点是“后进先出”,不能根据元素的索引获取元素,也不能根据元素查询在栈中的元素等等,所以说一般会了单链表,那么链栈其实也就会了。
要求:
* 1.使用内部类,内部类用来存放一个结点的数据,内部类设为私有的;
* 2.内部类要求有一个data变量,用来存储数据,和一个指向下一个结点的结点标量Next,并提供诺干结点的构造函数;
* 3.设置两个变量,size:用来存储数组中元素的个数,top用来存储头结点;
* 4.具备多个构造函数,一个初始化默认构造;另一个可以指定结点的构造;
* 5.提供如下几个功能:
* a.获取链栈的大小(size)
* b.进栈
* c.出栈
* d.判断单链表是否为空
* e.清空单链表
* f.获取栈顶元素
java代码实现如下:
/*
* 使用java实现链栈的存储和草操作
* */
public class LinkedStack<T> {
//定义一个内部类,内部类用来存放一个结点,提供两个构造函数,用来实例化结点
private class Node{
private T data;
private Node next;
public Node(){
}
public Node(T data,Node next){
this.data=data;
this.next=next;
}
}
//定义连个变量,top用来指向栈顶元素,size用来存放当前栈的元素个数
private Node top;
private int size=0;
//提供两个构造函数,用来初始化栈
public LinkedStack(){
}
public LinkedStack(T element){
top=new Node(element,null);
size++;
}
//进栈
public void push(T element){
Node node=new Node(element,null);
node.next=top;
top=node;
size++;
}
//出栈
public T pop(){
if(size==0){
return null;
}
Node node=top;
top=top.next;
size--;
node.next=null;
return node.data;
}
//获取栈的元素个数(长度)
public int size(){
return this.size;
}
//获取栈顶元素(非出栈)
public T getTop(){
if(size==0){
return null;
}
return top.data;
}
//清空栈
public void clear(){
top=null;
size=0;
}
//判断栈是否为空
public boolean isEmpty(){
return size==0;
}
public String toString(){
if(size==0){
return "[]";
}else{
String s="[";
Node current=top;
for(int i=0;i<size&¤t!=null;i++){
if(i<size-1){
s+=current.data+",";
}else{
s+=current.data+"]";
}
}
return s;
}
}
}
接下来是什么呢?树?还是?先看看吧......加油!