菜鸟的学习之路(11) — 堆栈与队列
一.堆栈:
堆栈我们先分开来说:
栈: 前面我们说过的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) — 堆栈与队列相关推荐
- 爬虫|菜鸟的学习之路——爬取一本小说
前言:本次爬取的是全书网的某一本小说并以.TXT格式下载到本地. 工具:python3 和 pycharm Python库:urllib.request 和 re 注意:python是用3以上的版本, ...
- Qt学习之路(11): MainWindow
尽管Qt提供了很方便的快速开发工具QtDesigner用来拖放界面元素,但是现在我并不打算去介绍这个工具,原因之一在于我们的学习大体上是依靠手工编写代码,过早的接触设计工具并不能让我们对Qt的概念突飞 ...
- GO语言学习之路11
2022/02/02package mainimport ("fmt""math/rand""time" )func test(arr *[ ...
- python xlrd模块_新手菜鸟Linux学习之路
今天我们的大产品,闲来无事,让我写一个关于处理execl文件的小脚本,帮助他去处理文件! 需求是:以上图的编号以及第二列作为文件夹名称及word名称,将最后一列作为word内容写入到word文件中 效 ...
- 菜鸟的学习之路(13) —TreeSet类的排序
一.TreeSet类解析: 1.TreeSet是依靠TreeMap实现的. 2.TreeSet中不能有重复的元素,而且是有序排列的. 3.自定义的类要想实现排序,实现Comparable接口,重写co ...
- 菜鸟的学习之路(12) —HashSet类详解
一.HashSet类详解: HashSet类的底层是HaskMap实现的.存入HashSet的元素是有HashMap的key来保存的.而HashMap的值是一个Object对象. HashSet中是不 ...
- 菜鸟的学习之路(10) — LinkedList类
一.认识LinkedList类: 实现的接口:Serializable,Cloneable,Iterable,Collection,Deque,List,Queue 父类:AbstractSequen ...
- 菜鸟的学习之路(9) — ArrayList类
一.认识ArrayList: 1.ArrayList是一个动态的数组(集合),可以在生成后对其中的内容进行增删改.相对于Array(静态数组),使用更灵活,可以对其内容进行修改. 2.实现的接口是Co ...
- 菜鸟的学习之路(8) — 数组(Array)
一.数组(Array): 1.数组:相同类型数据的集合就叫做数组. 定义的数组: type[ ] 变量名 = new type[数组中的元素个数]; 或 type 变量名[] = new type[数 ...
最新文章
- session文件无法并发操作
- Upgrading PHP on CentOS 6.5 (Final)
- 软测管理工具实践-01
- php 数组的处理,php 数组处理
- python矩阵所有元素取整_Python主要逻辑基础与处理
- Server 2012 Log off 按键
- 多个相机间的对齐之为什么需要对齐,对齐有什么好处?
- matlab 简单函数拟合(全)
- Array 常用函数
- C# LINQ 语法备忘-刘欣
- CF1437F Emotional Fishermen
- 微信小程序——VW、VH
- UESTC 1903 铁路
- 电脑数据迁移高招,怎么把旧电脑的数据迁移到新电脑
- Python实现人机交互剪刀石头布小游戏(七局四胜制)
- 江南春:30年,我用1000亿,换来这99句话
- 猪猪大PK V0.3
- Cisco Nexus vPC 之 Sticky Master
- ROS2 foxy 学习5 : Action 行动
- IP、内网、外网、私网、公网、子网掩码、默认网关的概念解析