一.堆栈:

堆栈我们先分开来说:

栈: 前面我们说过的8种基本数据类型和对象的引用变量,它们的值就存放在栈中。当它们除了作用域后会被自动释放。而且栈的存储速度快。数据可以共享,但是存在栈中的数据大小与生存期必须是确定。(它的共享理解与String pool一样)

堆:我们用new创建的对象和数组,它们在堆中分配内存。当它们不指向任何对象时,在随后的不确定的时间内,由java虚拟机来进行回收。堆的存储速度比栈慢,数据不可以共享,但是堆中的数据大小和生存期可以不事先告诉编译器。

这两种概念应该有了一个大概的了解,我们所说的堆栈其实就是一种线性表,仅在一端进行添加删除元素,这时就得到了一个堆栈。

我们用图来演示一下在一端进行数据操作:

从图中我们可以看出元素只有一个出口,后进来的元素压着先进来的元素,当想使用B元素时,我们需要先把C元素弹出,才能得到B元素,这就是堆栈的使用原则:后进先出。

前面说过堆栈是一种线性数据结构。我们可以自己去实现一个Stack。这样会更好的帮助我们理解堆栈的使用原则,下面是我自己简要实现的部分功能(因为初学所以可能繁琐,请大家多多指点):

public class StackTest {private Object[] stack;private int counter;public StackTest(){stack = new Object[10];counter = 0;}/*** 压栈* @param o*/public void push(Object o){if(counter < this.stack.length){this.stack[counter] = o;counter ++;}else{Object[] statck = this.stack.clone();this.stack = new Object[counter + 6];this.stack = stack.clone();this.stack[counter] = o ;counter ++ ;          }}/*** 返回顶部元素* @return*/public Object pop(){if(0 != counter){counter--;Object o = stack[counter];stack[counter] = null;return o;}else{return null;}}/*** 堆栈是否为空* @return*/public boolean empty(){return counter == 0;}
}
测试:
             

堆栈的实现方式有很多,用我们前面学过的链表实现起来更简单。

二.队列:

如果只能在一端添加新元素,在一端删除元素时,我们就得到队列,队列也是一种线性数据结构。队列的操作原则是:先进先出。

用图来表示:

不论是堆栈还是队列它们的实现都是多种多样,队列我用LinkedList来实现:

public class QueueTest {private LinkedList list;public QueueTest(){list = new LinkedList();}public void put(Object o){          list.addFirst(o);           }public Object get(){return list.removeLast();}public boolean idEmpty(){return list.isEmpty();}
}
测试:

菜鸟的学习之路(11) — 堆栈与队列相关推荐

  1. 爬虫|菜鸟的学习之路——爬取一本小说

    前言:本次爬取的是全书网的某一本小说并以.TXT格式下载到本地. 工具:python3 和 pycharm Python库:urllib.request 和 re 注意:python是用3以上的版本, ...

  2. Qt学习之路(11): MainWindow

    尽管Qt提供了很方便的快速开发工具QtDesigner用来拖放界面元素,但是现在我并不打算去介绍这个工具,原因之一在于我们的学习大体上是依靠手工编写代码,过早的接触设计工具并不能让我们对Qt的概念突飞 ...

  3. GO语言学习之路11

    2022/02/02package mainimport ("fmt""math/rand""time" )func test(arr *[ ...

  4. python xlrd模块_新手菜鸟Linux学习之路

    今天我们的大产品,闲来无事,让我写一个关于处理execl文件的小脚本,帮助他去处理文件! 需求是:以上图的编号以及第二列作为文件夹名称及word名称,将最后一列作为word内容写入到word文件中 效 ...

  5. 菜鸟的学习之路(13) —TreeSet类的排序

    一.TreeSet类解析: 1.TreeSet是依靠TreeMap实现的. 2.TreeSet中不能有重复的元素,而且是有序排列的. 3.自定义的类要想实现排序,实现Comparable接口,重写co ...

  6. 菜鸟的学习之路(12) —HashSet类详解

    一.HashSet类详解: HashSet类的底层是HaskMap实现的.存入HashSet的元素是有HashMap的key来保存的.而HashMap的值是一个Object对象. HashSet中是不 ...

  7. 菜鸟的学习之路(10) — LinkedList类

    一.认识LinkedList类: 实现的接口:Serializable,Cloneable,Iterable,Collection,Deque,List,Queue 父类:AbstractSequen ...

  8. 菜鸟的学习之路(9) — ArrayList类

    一.认识ArrayList: 1.ArrayList是一个动态的数组(集合),可以在生成后对其中的内容进行增删改.相对于Array(静态数组),使用更灵活,可以对其内容进行修改. 2.实现的接口是Co ...

  9. 菜鸟的学习之路(8) — 数组(Array)

    一.数组(Array): 1.数组:相同类型数据的集合就叫做数组. 定义的数组: type[ ] 变量名 = new type[数组中的元素个数]; 或 type 变量名[] = new type[数 ...

最新文章

  1. session文件无法并发操作
  2. Upgrading PHP on CentOS 6.5 (Final)
  3. 软测管理工具实践-01
  4. php 数组的处理,php 数组处理
  5. python矩阵所有元素取整_Python主要逻辑基础与处理
  6. Server 2012 Log off 按键
  7. 多个相机间的对齐之为什么需要对齐,对齐有什么好处?
  8. matlab 简单函数拟合(全)
  9. Array 常用函数
  10. C# LINQ 语法备忘-刘欣
  11. CF1437F Emotional Fishermen
  12. 微信小程序——VW、VH
  13. UESTC 1903 铁路
  14. 电脑数据迁移高招,怎么把旧电脑的数据迁移到新电脑
  15. Python实现人机交互剪刀石头布小游戏(七局四胜制)
  16. 江南春:30年,我用1000亿,换来这99句话
  17. 猪猪大PK V0.3
  18. Cisco Nexus vPC 之 Sticky Master
  19. ROS2 foxy 学习5 : Action 行动
  20. IP、内网、外网、私网、公网、子网掩码、默认网关的概念解析

热门文章

  1. Hive-1.2.0学习笔记(四)Hive表管理
  2. 将Vim打造成Python快速开发环境(一)
  3. uploadify 上传时丢失session
  4. RHEL5.9下cacti监控的部署详解
  5. 初等数论中的欧拉公式
  6. SQL查询一张表插入到另一张表
  7. Silverlight 4 初学者的10大经典问答
  8. BGP router-id OSPF router-id 路由同步实验
  9. cmder 神器 +curl
  10. Django model update的各种用法介绍