Java实现基于数组的顺序栈

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。后进先出(Last In First Out),简称为LIFO线性表。
栈的基本操作共有六种:

  1. 构造栈并初始化:Stack();Stack(int initalSize);
  2. 判断空栈:isEmpty();
  3. 判断满栈:isFull();
  4. 入栈操作:push(E e);
  5. 出栈操作:pop();
  6. 取栈顶元素但不出栈: peek();
    以下是源代码:
package linear;
/**
 *基于数组实现的顺序栈
 * @param <E>
 */
public class Stack<E>{
    private Object[] data = null; //栈元素数组
    private int Maxsize = 0; //栈容量
    private int top = -1; //栈顶元素下标

    public Stack()
    {
        init(20); //默认初始化大小为20的栈
    }
    public Stack(int initalSize)
    {
        init(initalSize);
    }
    //初始化栈
    private void init(int initalSize)
    {
        if(initalSize >= 0){
            this.Maxsize = initalSize;
            data = new Object[Maxsize];
            top = -1;
            System.out.println("大小为"+Maxsize+"的栈初始化成功!");
        }
        else{
            System.out.println("栈大小不能小于0:"+initalSize);
        }
    }
    //判断栈是否为空
    public boolean isEmpty(){
        return top == -1 ? true : false;
    }
    //判断栈是否满
    public boolean isFull(){
        return top >= Maxsize-1 ? true : false;
    }
    //压栈操作
    public boolean push(E e){
        if( isFull() ){
            System.out.println("栈已满,操作失败");
            return false;
        }
        else{
            top++;
            data[top] = e;
            System.out.println("元素‘"+e+"’入栈");
            return true;
        }
    }
    //出栈操作
    @SuppressWarnings("unchecked")
    public E pop(){
        if( isEmpty() ){
            System.out.println("空栈!操作失败");
            return null;
        }
        else{
            E e = (E)data[top]; 
            data[top] = null; //元素出栈后数组该位置置空
            top--;
            return e; 
        }
    }
    //取栈顶元素但不出栈
    @SuppressWarnings("unchecked")
    public E peek(){
        if( isEmpty() ){
            System.out.println("栈为空!操作失败");
            return null;
        }
        else{
            return (E)data[top];
        }
    }

    public static void main(String[] args) {
        Stack<String> s = new Stack<String>();
        s.push("鬼迷心窍");
        s.push("爱的代价");
        s.push("给自己的歌");
        while(!s.isEmpty())
        {
            String str = s.pop();
            System.out.println(str);
        }
    }
}

测试结果:
这里写图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值