java实现栈
2016-04-15 11:59
477 查看
今天用java的集合实现一个栈的功能,作为熟悉栈数据结构的学习也是不错的,代码如下:
/**
* 以ArrayList为基本结构实现栈
* @author Administrator
*
* @param <T>
*/
public class StackUtils<T> {
ArrayList<T> dataList;
int maxSize;
//栈顶指针 -1:空栈
int top;
public StackUtils(int maxSize) {
this.dataList = new ArrayList<T>();
this.maxSize = maxSize;
this.top = -1;
}
/**
* 入栈
* @param data
* @return
*/
public boolean push(T data) {
if(isFull()){
System.out.println("stack is full");
return false;
}
dataList.add(data);
top++;
return true;
}
/**
* 出栈
* @return
* @throws Exception
*/
public T pop() throws Exception {
if(isEmpty()){
throw new Exception("栈已空!");
}
return dataList.get(top--);
}
/**
* 栈是否满
* @return
*/
public boolean isFull() {
return top+1==maxSize;
}
/**
* 栈是否空
* @return
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 栈数量
* @return
*/
public int getElementCount() {
return top+1;
}
/**
* 返回栈顶元素
* @return
* @throws Exception
*/
public T peek() throws Exception {
if(isEmpty()){
throw new Exception("栈已空!");
}
return dataList.get(top);
}
public static void main(String[] args) throws Exception {
StackUtils<String> stack=new StackUtils(1000);
stack.push(new String("1"));
stack.push(new String("2"));
stack.push(new String("3"));
stack.push(new String("4"));
stack.push(new String("5"));
System.out.println(stack.peek());
while(stack.top>=0)
{
System.out.println(stack.pop());
}
}
}
/**
* 以ArrayList为基本结构实现栈
* @author Administrator
*
* @param <T>
*/
public class StackUtils<T> {
ArrayList<T> dataList;
int maxSize;
//栈顶指针 -1:空栈
int top;
public StackUtils(int maxSize) {
this.dataList = new ArrayList<T>();
this.maxSize = maxSize;
this.top = -1;
}
/**
* 入栈
* @param data
* @return
*/
public boolean push(T data) {
if(isFull()){
System.out.println("stack is full");
return false;
}
dataList.add(data);
top++;
return true;
}
/**
* 出栈
* @return
* @throws Exception
*/
public T pop() throws Exception {
if(isEmpty()){
throw new Exception("栈已空!");
}
return dataList.get(top--);
}
/**
* 栈是否满
* @return
*/
public boolean isFull() {
return top+1==maxSize;
}
/**
* 栈是否空
* @return
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 栈数量
* @return
*/
public int getElementCount() {
return top+1;
}
/**
* 返回栈顶元素
* @return
* @throws Exception
*/
public T peek() throws Exception {
if(isEmpty()){
throw new Exception("栈已空!");
}
return dataList.get(top);
}
public static void main(String[] args) throws Exception {
StackUtils<String> stack=new StackUtils(1000);
stack.push(new String("1"));
stack.push(new String("2"));
stack.push(new String("3"));
stack.push(new String("4"));
stack.push(new String("5"));
System.out.println(stack.peek());
while(stack.top>=0)
{
System.out.println(stack.pop());
}
}
}
相关文章推荐
- spring4.2+spring mvc +spring data+jpa+hibernate的程序构架
- java中静态代码块的用法 static用法详解
- 转:myeclipse和eclipse的区别和联系,以及版本间的对应关系
- springmvc向页面传值时对list去重
- 转: MyEclipse 10.0,9.0,8.0 下添加jadClipse反编译插件
- eclipse常用20个快捷键
- Java并发编程:Lock
- spring aop中的propagation的7种配置的意思
- 基于配置的Spring AOP
- Editplus如何进行JAVA程序编译调试
- java生成图片验证码实例代码
- SpringMVC、MyBatis声明式事务管理+AOP配置
- Java 二分查找
- 开发环境配置-在eclipse中关联jar的源码和javadoc-9
- springmvc实现文件上传下载
- myEclipse中设置代码区的背景颜色
- SpringBoot配置Email发送功能
- 解决mySql中文乱码以及Eclipse插入中文出现乱码
- Java相对路径/绝对路径总结
- java类别问题