本文目录
1、栈介绍
栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top)
, 另一端为固定的一端, 称为栈底(Bottom)
。
下图是出栈和入栈逻辑示意图:
2、基于数组实现出栈、入栈逻辑
以下代码是基于数组,使用java语言,实现出栈、入栈逻辑。
class ArrayStack{
private int maxSize;
/**
* 使用数组模拟栈
*/
private int[] arr;
/**
* 栈顶,默认为-1
*/
private int top=-1;
public ArrayStack(int maxSize){
if (maxSize<=0){
throw new RuntimeException("栈大小不合法");
}
//初始化数组
arr=new int[maxSize];
maxSize=maxSize;
}
/**
* 栈是否为空
* @return
*/
public boolean isEmpty(){
return top==-1;
}
/**
* 栈是否满了
* @return
*/
public boolean isFull(){
return top==maxSize-1;
}
public void push(int value){
if (isFull()){
throw new RuntimeException("栈已经满了");
}
top++;
arr[top]=value;
}
/**
* 出栈
*/
public int pop(){
if (isEmpty()){
throw new RuntimeException("栈为空");
}
int value=arr[top];
top--;
return value;
}
/**
* 栈的遍历
*/
public void list(){
if (isEmpty()){
throw new RuntimeException("栈为空");
}
for (int i=top;i>=0;i--){
System.out.printf("stack[%d]=%d\n", i, arr[i]);
}
}
}
测试
public static void main(String[] args) {
ArrayStack arrayStack=new ArrayStack(5);
arrayStack.push(1);
arrayStack.push(2);
arrayStack.push(3);
arrayStack.push(4);
arrayStack.push(5);
arrayStack.list();
int a=arrayStack.pop();
System.out.println("出栈的值:"+a);
arrayStack.list();
}