栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
![](https://i-blog.csdnimg.cn/blog_migrate/caa568dd4d43d2001e95cc6132aa6e7f.jpeg)
一、基本算法
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
二、Java代码:
public class Stack {
int[] arr;
int len = 0;
public Stack() {
arr = new int[100];
}
public Stack(int n)
{
arr = new int[n];
}
//返回栈大小
public int size()
{
return len+1;
}
//扩大数组
public void resize()
{
int[] b = new int[arr.length*2];
System.arraycopy(arr,0,b,0,arr.length);
arr = b;
}
//显示栈元素
public void show()
{
for(int i=len-1;i>=0;i--){
System.out.println(arr[i]+" ");
}
System.out.println();
}
//出栈
public int pop()
{
if(len == 0)
{
System.out.println();
System.out.println("Stack is empty!");
return -1;
}
int a = arr[len-1];
arr[len-1] = 0;
len--;
return a;
}
//进栈
public void push(int n)
{
if(len>= arr.length)
resize();
arr[len] = n;
len++;
}
//读栈顶元素
public int top()
{
return arr[len-1];
}
}