有很长的时间没有写文章了,因为我之前一直有项目在忙,后面又要准备期末考试,期末刚考完,又马不停蹄的去实习。我在校期间真的是很忙,学生会,班委,项目,学习,所以能找出的空余时间也不是很多,有空了就整理一下我的学习笔记,和大家分享一下。
我之前报过一些编程比赛,像CCF认证,华为编程大赛,微软的编程之美,hihocoder大赛,有兴趣的朋友可以去看一看,如果后边有空的话,我也可以和大家分享一下我的结题思路。
好了,言归正传,这一次先和大家分享一下栈。栈在数据结构中,是一种后入先出的结构,大家可以想一下一个箱子,这个箱子中的东西我是一个压在一个上面的,这个肯定是先放进去的放在下边,后放进去的放在上边,如果想拿下边的东西,势必要把上边的东西先拿出来。
那么我们在实际的编程当中又有什么用呢?很多人在写计算器的过程当中会用到桟,这里我就不赘述了,分享一个ppt给大家看一下吧 [简易计算器(栈)](http://wenku.baidu.com/link?url=WgP-2UcEJy53ShbZC3gQVHZTXrHbgg14COe3HE9ybEfI82sr8nMvc-FobNBS9WwQr1ljoAha9YoR_B2kFjx65CDs1aTE0lV5rTx1UCOyCZW)
还有一些用于数制转换,10进制转2进制等等。
接下来我给大家介绍一下在JAVA当中怎样写桟
package datastructure;
import java.util.LinkedList;
/**
*
* @author qincheng
*/
public class StackADT<T> {
int top=0;
LinkedList<T> stack=new LinkedList<>();
public void push(T e){
top++;
stack.add(e);
}
public T pull(){
if(top>0){
T e=stack.get(top-1);
top--;
stack.remove(top);
return e;
}
return null;
}
}
在这里面我使用了泛型,因为我们事先不知道栈里面要存什么东西,可以使String字符串,也可以是整数,浮点数。所以我们使用了一个泛型。
这个栈实现起来简单吧。下面我来给大家演示一下这个栈的使用
public static void main(String[] args) {
// TODO code application logic here
StackADT<Integer> stack;
stack=new StackADT<Integer>();
stack.push(5);
stack.push(6);
System.out.println(stack.pull());
System.out.println(stack.pull());
}
这里我们建立的是一个整数类型的栈。首先,我们将栈中的添加一个5,然后,我们在添加一个整数6。之后,我再将他们取出来。
我们来看一下运行的结果
结果时后进入栈的,先被取出来。
可能有朋友要问,如果在我的栈空的情况下 在pull会怎么样呢 ?
下面我们将代码修改一下,改成添加2个元素,取出3次,那么结果呢?
返回的是null,并没有报错而退出,这样会使程序继续进行下去。程序员在编程过程最好先 访问一下数值top,在决定是否在栈中取出元素。