Java数据结构-线性表之栈(顺序栈和链栈)

本文详细介绍了栈的定义、性质以及顺序栈和链栈的区别。通过Java代码展示了顺序栈和链栈的实现,包括进栈、出栈操作,并探讨了两栈共享空间的概念。同时,对两种栈的优缺点进行了比较,提供了应用场景的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈的定义:(特殊的线性表)

  仅在表的一端进行插入和删除的线性表。允许插入、删除的这一端称为栈顶,另一端称为栈底。表中没有元素时称为空栈。

  被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表。

  栈更具存储方式的不同分为两种:顺序栈和链栈。

顺序栈:

  • 和顺序表一样,顺序栈也采用数组来存放数据元素;
  • 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底。
  • 而栈顶指针的最大值为capacity(栈的容量)-1;
  • 当栈为空栈时,采用栈顶指针指向-1表示。

下面借图(来自http://www.nowamagic.net/librarys/veda/detail/2271)演示一下:

对于顺序栈,数据元素的进栈操作解释如下:

  1. 栈顶指针top先自增1,给需要进栈的元素腾出内存空间;
  2. 然后给top对应的数组元素赋值,data[top] = e。size加1

出栈的操作则相反,如下:

  1. 先获得栈顶指针对应的数组元素的值;
  2. 然后栈顶指针top减1。size减1

下面是我的Java代码实现:

package com.phn.stack;
/**
 * @author 潘海南
 * @Email 1016593477@qq.com
 * @TODO 顺序栈
 * @date 2015年7月20日
 */
public class FOArrayStack<E> {
    //初始化默认栈的存储容量
    private static final int DEFUALT_CAPACITY = 100;
    //栈中存储数据元素的数组
    private Object[] data = null;
    //栈的实际大小
    private int size;
    //栈的栈顶指针
    private int top;
    //栈的实际容量
    private int capacity;
    /**
     * @TODO 无参构造函数,初始化栈
     */
    public FOArrayStack(){
        this(DEFUALT_CAPACITY);
    }
    /**
     * @TODO 带参构造函数,初始化栈
     * @param initialCapacity 初始化栈的容量
     */
    public FOArrayStack(int initialCapacity) {
        this.capacity = initialCapacity;
        this.data = new Object[initialCapacity];
        this.size = 0;
        this.top = this.size-1;
    }
    /**
     * @TODO 压入数据元素到栈中
     * @param e 数据元素
     * @return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值