用removeLast和removeFrist来模仿堆和栈
/*
*在大不久前,我决定自学Java,关注了很多的公众号、微博等。没几天我看到一个笑话:
*晚上孩子哭了,老婆让我去看看。
*我说:“不行,咱们的床是队列,你先上的床就得你先下床。。。
*老婆说:NO NO No,是栈。
* 紧接着一脚踹到我的屁股上。
* 当时,看了评论,都是在说程序员夫妻欢乐多之类的话,也上网查了堆栈的知识,
* 不是计算机专业的,看得也是云里雾里的。今天是二轮复习基础知识,
* 关于LinkedList有可以模拟堆栈的方法,就上手操作了一下,才理解了这个笑话的真谛,
* 越来越感觉,编程语言的魅力了,开心。
*/
import java.util.LinkedList; public class NoNo {
public static void main(String[] args) {
MyQueue q = new MyQueue();
q.add("老婆先上床");
q.add("我在老婆之后上床"); while (q.isEmpty() == false) { System.out.println(q.get2() + "却要下床哄熊孩子"); } }
} class MyQueue {
private LinkedList List;// 底层 MyQueue() {
List = new LinkedList();
} public void add(Object obj) {
List.addFirst(obj);
}
public Object get2() {
// 模仿栈
return List.removeFirst();
} public boolean isEmpty() {
return List.isEmpty();
}
}
PutOut:
我在老婆之后上床却要下床哄熊孩子
老婆先上床却要下床哄熊孩子
import java.util.LinkedList; public class NoNo {
public static void main(String[] args) {
MyQueue q = new MyQueue();
q.add("老婆先上床");
q.add("我在老婆之后上床"); while (q.isEmpty() == false) { System.out.println(q.get()+"却要下床哄熊孩子");
} }
} class MyQueue {
private LinkedList List;// 底层 MyQueue() {
List = new LinkedList();
} public void add(Object obj) {
List.addFirst(obj);
} public Object get(){
//模仿队列
return List.removeLast();
} public boolean isEmpty() {
return List.isEmpty();
}
}
OutPut:
老婆先上床却要下床哄熊孩子
我在老婆之后上床却要下床哄熊孩子
相关知识补充:
追源码:
用removeLast和removeFrist来模仿堆和栈的更多相关文章
- C#=> 栈模仿堆的操作
//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出.. using System; using System.Collections.Generic; using System.Linq; us ...
- JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面 ...
- java中内存分配策略及堆和栈的比较
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- 译文---C#堆VS栈(Part One)
前言 本文主要是讲解C#语言在内存中堆.栈的使用情况,使读者能更好的理解值类型.引用类型以及线程栈.托管堆. 首先感谢原文作者:Matthew Cochran 为我们带来了一篇非常好的文章,并配以大量 ...
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...
- C语言堆和栈
堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap ...
- JAVA中用堆和栈的概念来理解equals() "=="和hashcode()
在学习java基本数据类型和复杂数据类型的时候,特别是equals()"=="和hashcode()部分时,不是很懂,也停留了很长时间,最后终于有点眉目了. 要理解equals() ...
- C/C++ 堆和栈的区别
堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其 操作方式类似于数据结构中的栈. 2.堆区(h ...
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典) (转)
原文链接 : http://www.cnblogs.com/xiohao/p/4296088.html 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的 ...
随机推荐
- Python之编写登录接口
作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 帐号文件account.txt内容如下: liuyueming 123zhangsan 123lisi 123 锁文件acc ...
- poj 1321 棋盘问题 简单DFS
题目链接:http://poj.org/problem?id=1321 很久没有敲搜索了啊,今天敲了个水题练练手,哈哈.... 题目大意: 就是求在n*n的方格上放置k个棋子的方案数 代码: #inc ...
- 使用MyEclipse生成实体类和Hibernate映射文件
1.打开MyEclipse DataBase Explorer. 如上图,点击图中2便可切换到MyEclipse DataBase Explorer,若没有该图标,则点击图中1,便可选择MyEclip ...
- 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean
相关文章目录: 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean 开源框架是如何通过JMX来做监控的(二) - Druid连接池的监控 相信很多做Java开发的同 ...
- Java学习笔记——设计模式之二.策略模式
明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...
- JAVA引用和垃圾回收
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: 1 Object o=new Object(); // 强引用 ...
- Linux如何安装VMware Tools
第一步:安装VMware Tools 桌面上会出现一个光盘,并且会弹出一个框框,里面是VMware Tools的安装包,将其拖到桌面上 就像下面这样 进入终端,将文件拷贝到/tmp目录下面,并解压(也 ...
- 《Android进阶》之第四篇 ViewPagerIndicator的使用
1.先将这个开源框架下载到本地: Administrator@QH-20141231RFQJ /d/hixin $ cd ViewPagerIndicator/ Administrator@QH-20 ...
- MySql学习笔记(五) —— 存储过程
存储过程是MySql 5支持的特性,它是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之 ...
- Handling Class Imbalance with R and Caret - An Introduction
When faced with classification tasks in the real world, it can be challenging to deal with an outcom ...