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

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

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

  被称为后进先出的线性表(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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种最基本的数据结构,常用于存储和管理有序的数据元素。在Java中,我们可以使用数组或链表来设计和实现线性表。 首先,我们来看数组实现线性表的方式。数组是一种连续的存储结构,可以按照索引的方式直接访问元素。我们可以通过定义一个固定大小的数组来创建线性表,并使用一个变量来记录线性表的长度。对于插入和删除操作,需要移动元素位置来完成,而查找操作则可以通过直接访问索引来完成。 另一种实现线性表的方式是使用链表。链表是一种非连续的存储结构,通过每个元素内部包含下一个元素的地址来连接。在Java中,我们可以定义一个节点类来表示链表中的元素,节点类中包含一个数据域和一个指向下个节点的引用。我们可以通过定义一个头节点来创建链表,头节点不存储具体的数据,只用作链表的入口。对于插入和删除操作,只需要修改节点的引用指向即可,而查找操作需要遍历整个链表来找到目标元素。 无论是数组还是链表的实现方式,线性表都可以支持常见的操作,如插入、删除、查找、遍历等。我们可以根据具体的需求选择使用哪种方式,例如,如果需要频繁进行插入和删除操作,则链表的实现方式更为灵活,而数组实现方式则更适合需要频繁进行索引访问的场景。 在Java中,我们还可以利用已有的数据结构类库来简化线性表的设计和实现。例如,Java提供了ArrayList和LinkedList两个类,分别基于数组和链表实现线性表的功能,并提供了丰富的方法来操作线性表。我们可以直接使用这些类来快速实现和使用线性表,避免了重新设计和实现的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值