栈的操作
以栈存储的数据是char类型为例:
- void push(char)/boolean push(char) //压入一个数据
- char pop() //删除并返回栈顶的元素
- char top() //返回栈顶元素
- int size() //返回数据个数
- boolean isEmpty() //判断栈是否为空
- boolean isStackFull() //判断栈是否已满
用简单数组实现栈类
package stack;
public class ArrayStack {
private char[] array;
private int top;//最上面数据的下标
private int size;//可存储数据的数量
public ArrayStack(int size){
this.size=size;
array=new char[size];
top=-1;
}//初始化
public boolean push(char data){
if(top+1==size){
return false;
}
else{
top++;
array[top]=data;
return true;
}
}//满了以后放入失败 返回false
public char pop(){
if(top==-1){
return '*';
}
else{
top--;
return array[top+1];//不能先返回再变top
}
}//为空则取出失败 返回*
public char top(){
if(top!=-1)
return array[top];
else
return '*';
}
public int size(){
return top+1;
}
public boolean isEmpty(){
return (top==-1);
}
public boolean isStackFull(){
return (top+1==size);
}
}
简单测试
package stack;
public class TestArrayStack {
public static void main(String[] args){
ArrayStack as=new ArrayStack(4);
//System.out.println("已有元素数量:"+as.size());
System.out.println("是否为空:"+as.isEmpty());
System.out.println("是否已满:"+as.isStackFull());
System.out.println("第一个数据为:"+as.top());
as.push('a');
as.push('b');
System.out.println("已有元素数量:"+as.size());
System.out.println("是否为空:"+as.isEmpty());
System.out.println("是否已满:"+as.isStackFull());
System.out.println("第一个数据为:"+as.top());
as.push('c');
as.push('d');
as.push('e');
System.out.println("已有元素数量:"+as.size());
System.out.println("是否为空:"+as.isEmpty());
System.out.println("是否已满:"+as.isStackFull());
System.out.println("第一个数据为:"+as.top());
System.out.println("所有元素依次取出:");
for(int i=1;i<5;i++){
System.out.print(as.pop()+" ");
}
}
}
输出结果如下:
是否为空:true
是否已满:false
第一个数据为:
所有元素依次取出:
已有元素数量:2
是否为空:false
是否已满:false
第一个数据为:b
所有元素依次取出:
已有元素数量:4
是否为空:false
是否已满:true
第一个数据为:d
所有元素依次取出:
d c b a