数据结构基础之栈

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

如何理解栈

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

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

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

 

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

如何实现一个栈

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

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

	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. 浏览器的前进后退功能。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值