用数组模拟栈
栈:先进后出的有序列表
栈顶:允许插入和删除的一端
栈低:为固定的一端
栈的常用方法:boolean empty( ):
如果堆栈是空的,则返回true,当堆栈包含元素时,返回false
。Object peek( ):
返回位于栈顶的元素,但是并不在堆栈中删除它。Object pop( ):
返回位于栈顶的元素,并在进程中删除它。Object push (Object element ):
将element
压入堆栈,同时也返回element
。int search(Object element)
:在堆栈中搜索element
,如果发现了,则返回它相对于栈顶
的偏移量。否则,返回-1
。
出栈(pop)入栈(push)示意图:
代码块:入栈- 出栈 -遍历栈
class ArrayStack{
//定义属性 属性一般都定义为私有的
private int maxSize ;
private int[] satck ;//定义一个数组 用数组模拟栈 数据就存放在里面
private int top = -1;//top表示栈顶 初始化为-1
//构造器
public ArrayStack(int maxSize){
//给属性初始化
this.maxSize = maxSize;
//此时必须还得给数组初始化
satck = new int[maxSize];//数组是引用数据类型,得new
}
//判断是不是栈满
public boolean isFull(){
return top == maxSize-1;
}
//判断是不是栈空 注意 == 出来的是true和false
public boolean isEmpty(){
return top == -1;
}
//入栈 push
public void push(int value){
//先判断栈是否满
if(isFull()){
System.out.println("栈已满");
return;
}
top++;
satck[top] = value;
}
//出栈 Pop 将栈顶的数据返回 同时top--
public int pop(){
//先判断栈是否为空
if(isEmpty()){
throw new RuntimeException("栈为空,没有数据");
//当有throw时,就不需要return了
}
int value = satck[top];
top--;
return value;
}
//显示栈的情况 遍历时需要从栈顶开始显示数据
public void list(){
if(isEmpty()){
System.out.println("栈空");
}
//注意这里i是可以取到0的
for(int i = top ;i >= 0;i--){
System.out.println(i+","+satck[i]);
}
}
}