这篇文章讲述的是链栈的java实现,如有错误或者不当之处,还望各位大神批评指正。
栈的特点
- 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
- 栈的特点是先入后出
栈的基本操作
- 栈的创建 initStack()
- 压栈操作 push(Element elem)
- 出栈操作 pop()
- 计算栈的长度 length()
- 清空一个栈 clear()
- 依次输出栈顶到栈底的元素 print()
- 取栈顶元素getTop()
链栈的java实现
/*链栈的java实现*/
class Stack{
/*定义两个指针目的是分别指向栈底和栈顶*/
private Element base ;
private Element top ;
/*栈中的数据模型*/
class Element{
public Object data ; //栈中元素
Element next ; //下一个元素
}
/*初始化*/
public void init(){
Element elem = new Element() ; //开辟一个元素的空间作为栈底
base = elem ; //top指针和base指针初始化
top = elem ;
base.data = null ;
//System.out.println("栈已初始化");
}
/*压栈操作*/
public void push(Object obj){
Element elem = new Element() ; // 入栈元素分配空间
elem.data = obj ; // 将元素放入
elem.next = top ; // 元素指针指向当前top所指元素
top = elem ; // 修改top指针
//System.out.println(top.data+" 压栈成功");
}
/*退栈操作*/
public Object pop(){
if(this.isEmpty()){
System.out.println("退栈失败,栈为空!");
return null ;
}
Object obj = top.data ; //取出对象的值
top = top.next ; //修改top指针
//System.out.println(obj+" 退栈成功");
return obj ; //返回元素
}
/*判断栈是否为空*/
public boolean isEmpty(){
if(base == top) //若栈顶栈底指针相同,则为空否则非空
return true ;
else
return false ;
}
/*清空栈*/
public void clear(){
while(!this.isEmpty()){
this.pop() ;
}
System.out.println("栈已清空");
}
/*获取栈的大小*/
public int size(){
int n = 0 ;
Element flag = top ;
while(flag!=base){
flag = flag.next ;
n++ ;
}
return n ;
}
/*获取栈顶元素*/
public Element getTop(){
return top ;
}
/*遍历栈,输出栈的元素*/
public void print(){
if(this.isEmpty()){ //若栈空
System.out.println("输出失败,栈为空!");
}else{
Element flag = top ;
System.out.print("栈中元素为:");
while(flag != base){
System.out.print(flag.data+" ");
flag = flag.next ;
}
}
}
}