Java——数组栈的实现
程序员文章站
2022-06-05 15:05:13
...
我相信大家应该都对栈有一个初步的认识,并知栈的特点:先进后出。那么栈具体是怎样实现的呢?
一、首先先带大家看一下顺序栈实现的动图:
二、具体用代码是怎样实现的
/**
Stack是一个简单的由一维数组实现的栈结构
支持入栈出栈等常见操作,但不支持动态扩容操作
为了方便简化代码,默认此Stack中只能存储int型数据
*/
public class Stack{
private int[] data; // 容器 用于存储栈元素 data.length表示栈的最大容量
private int top=-1; // 栈顶标记 用于标记栈顶元素的位置 当栈为空时 top=-1 栈中有效元素的个数top+1
private int capacity=10; //默认最大容量为10
/**
创建一个默认容量为10的栈
*/
public Stack(){
this.data=new int[capacity];
}
/**
创建一个指定容量为capacity的栈
@param capacity 由调用者传入的指定容量
如果capacity<0 则容量置为0
如果capacity>100 则容量置为100
*/
public Stack(int capacity){
if(capacity<0){
capacity=0;
}
if(capacity>100){
capacity=100;
}
this.data=new int[capacity];
}
/**
将元素e入栈,如果栈当前已满,则无法加入
@param e 用户指定入栈的元素
*/
public void push(int e){
if(top+1==this.data.length){
System.out.println("栈已满");
}
this.data[++top]=e;
}
/**
从栈中弹出一个元素,如果栈已经是空,则返回-1即可(没有学异常 -1表示错误)
@return 返回当前栈顶的元素,如果栈为空则返回-1
*/
public int pop(){
if(isEmpty()){
return -1;
}
//System.out.println("当前栈顶元素为"+)
return this.data[top--];
}
/**
获取当前栈顶元素(不出栈),如果栈已经是空,则返回-1即可
@return 返回当前栈顶的元素,如果栈为空则返回-1
*/
public int peek(){
if(isEmpty()){
return -1;
}
return this.data[top];
}
/**
判断当前栈是否为空
@return true表示栈空 否则栈不为空
*/
public boolean isEmpty(){
return top==-1;
}
/**
清空当前的栈
*/
public void clear(){
top=-1;
}
/**
获取栈中有效元素的个数
*/
public int size(){
if(top==-1){
return -1;
}
return top+1;
}
/**
返回栈的字符串表现形式
*/
public String toString(){
if(isEmpty()){
return "[]";
}
String str="[";
for(int i=0;i<size();i++){
if(i>=0&&i<size()-1){
str+=this.data[i]+",";
}
if(i==size()-1){
str+=this.data[i]+"]";
}
}
return str;
}
}
/*
主函数
*/
class Test02{
public static void main(String[] args){
Stack stack=new Stack(20);
for(int i=1;i<=20;i++){
stack.push(i);
}
System.out.println(stack.toString());
System.out.println("获取栈中的有效元素:"+stack.size());
System.out.println("返回栈顶元素:"+stack.peek());
stack.clear();
System.out.println(stack.isEmpty());
}
}
上一篇: Swift数据结构——栈的实现
下一篇: Java 数据结构——链式栈