栈是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈为空栈。栈的顺序存储结构为顺序栈。通常把数组中下标为0的一端作为栈底,同时附设指针top指向栈顶元素的位置,栈空时top = -1。
以下是java实现顺序栈的代码:
package com.dhy.seqstack;
/**
* 顺序栈
* @author Administrator
*
*/
public class SeqStack <T>{
private Object[] elementData; //存放元素的数组
private int stackSize; //栈的大小
private int top; //栈顶指针,为数组元素下标
/**
* 构造一个栈
*/
public SeqStack(int size){
elementData = new Object[size];
stackSize = size;
top = -1;
}
/**
* 压栈
* @param e
* @return
*/
public boolean push(Object e){
if(top == stackSize - 1)
throw new RuntimeException("栈已满");
top++;
elementData[top] = e;;
return true;
}
/**
* 出栈
* @return
*/
@SuppressWarnings("unchecked")
public T pop(){
if(top == -1)
throw new RuntimeException("栈为空");
return (T)elementData[top--];
}
/**
* 获取栈顶元素
* @return
*/
@SuppressWarnings("unchecked")
public T get(){
if(top == -1)
throw new RuntimeException("栈为空");
return (T)elementData[top];
}
/**
* 判断栈是否为空
* @return
*/
public boolean isEmpty(){
if(top == -1)
return true;
else
return false;
}
/**
* 遍历
*/
@SuppressWarnings("unchecked")
@Override
public String toString(){
String str = "[";
for(int i=top;i>=0;i--){
if(i == 0)
str = str + (T)elementData[i];
else
str = str + (T)elementData[i] + ",";
}
str = str + "]";
return str;
}
}