数据结构基础之栈

简介: 数据结构基础之栈

栈:一种操作受限的线性表,只允许在一端插入和删除数据。

如何理解栈

汉诺塔你有没有玩过,每根柱子上的碟子每次只能操作最上层的一个,或者,你可以想象平时生活中的盘子的堆叠方式,每次我们使用时都是从最上层拿一个,放的时候也是放在最上次,这种类型的结构就是典型的栈结果,满足,后进先出、先进后出的特点,这也是栈的数据结构特点。

由于我们每次只能操作栈顶元素,因此说栈是操作受限的线性表。

当要操作的数据集合只涉及在一端插入和删除数据,并满足先进后出、后进先出性,就可首选栈。

 

了解了栈的基本结构,我们来看看如何实现一个栈。

如何实现一个栈

栈即可用数组实现,也可用链表来实现,数组实现的栈叫顺序栈,链表实现的栈叫链式栈。

以下,我们用数组来模拟一下栈的基本操作。

  public class ArrayStack {
    private String[] items;  // 数组
    private int count;       // 栈中元素个数
    private int n;           // 栈的大小
    // 初始化数组,申请一个大小为 n 的数组空间
    public ArrayStack(int n) {
      this.items = new String[n];
      this.n = n;
      this.count = 0;
    }
    // 入栈操作
    public boolean push(String item) {
      // 数组空间不够了,直接返回 false,入栈失败。
      if (count == n) return false;
      // 将 item 放到下标为 count 的位置,并且 count 加一
      items[count] = item;
      ++count;
      return true;
    }
    // 出栈操作
    public String pop() {
      // 栈为空,则直接返回 null
      if (count == 0) return null;
      // 返回下标为 count-1 的数组元素,并且栈中元素个数 count 减一
      String tmp = items[count-1];
      --count;
      return tmp;
    }
  }

至此,栈的基本内容就结束了。

栈的其他应用

  1. 表达式求值
  2. 函数调用栈
  3. 括号匹配
  4. 浏览器的前进后退功能。
相关文章
|
10天前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
4天前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景
|
10天前
|
存储 测试技术
【数据结构】操作受限的线性表,栈的具体实现
【数据结构】操作受限的线性表,栈的具体实现
19 5
|
10天前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
11天前
|
算法
【C/数据结构和算法】:栈和队列
【C/数据结构和算法】:栈和队列
18 1
|
15天前
|
C++
【洛谷 P1044】[NOIP2003 普及组] 栈 题解(递归+记忆化搜索)
**NOIP2003普及组栈问题**:给定操作数序列1到n,仅允许push(进栈)和pop(出栈)操作。目标是计算所有可能的输出序列总数。输入包含一个整数n(1≤n≤18)。示例输入3,输出5。当队列空时返回1,栈空则只能入栈,栈非空时可入栈或出栈。AC C++代码利用记忆化搜索求解。
11 1
|
3天前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景
|
4天前
|
算法
数据结构与算法:栈与队列
数据结构与算法:栈与队列
|
7天前
|
存储 算法 调度
算法与数据结构-栈篇
算法与数据结构-栈篇
12 0
|
8天前
|
存储 人工智能 程序员
技术心得记录:堆(heap)与栈(stack)的区别
技术心得记录:堆(heap)与栈(stack)的区别