当前位置: 首页 > news >正文

Android 开发 数据结构理解 队列和栈 分析及实现

队列是一种(先进先出)的数据结构,栈(先进后出)的数据结后

 

回顾JDK提供的集合类

  容器(集合)框架如下:

  集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。

  集合类型主要有3种:set(集)、list(列表)和map(映射)。

  Collection接口

  ├List 接口

  │├LinkedList 链表

  │├ArrayList 顺序结构动态数组类

  │└Vector 向量

  │ └Stack 栈

  Map接口

  ├Hashtable

  ├HashMap

  └Set接口

  Collection<--Set<--HashSet

  Collection<--Set<--HashSet<--LinkedHashSet

  Collection<--Set<--SortedSet(也是接口)<--TreeSet

  LinkedList 双端队列

 

我们就来实现 基于 LinkedList 的队列和栈

队列实现:

import java.util.LinkedList;
import java.util.Queue;

public class MyQueue<T> {
private Queue<T> storage = new LinkedList<T>();

/** 将指定的元素插入队尾 */
public void offer(T v) {
storage.offer(v);
}

/** 检索,但是不移除队列的头,如果此队列为空,则返回 null */
public T peek() {
return storage.peek();
}

/** 检索,但是不移除此队列的头 */
/** 此方法与 peek 方法的惟一不同是,如果此队列为空,它会抛出一个异常 */
public T element() {
return storage.element();
}

/** 检索并移除此队列的头,如果队列为空,则返回 null */
public T poll() {
return storage.poll();
}

/** 检索并移除此队列的头 */
/** 此方法与 poll 方法的不同在于,如果此队列为空,它会抛出一个异常 */
public T remove() {
return storage.remove();
}

/** 队列是否为空 */
public boolean empty() {
return storage.isEmpty();
}

/** 打印队列元素 */
public String toString() {
return storage.toString();
}
}



 

栈实现:

import java.util.LinkedList;

public class Stack<T> {
private LinkedList<T> storage = new LinkedList<T>();

/** 入栈 */
public void push(T v) {
storage.addFirst(v);
}

/** 出栈,但不删除 */
public T peek() {
return storage.getFirst();
}

/** 出栈 */
public T pop() {
return storage.removeFirst();
}

/** 栈是否为空 */
public boolean empty() {
return storage.isEmpty();
}

/** 打印栈元素 */
public String toString() {
return storage.toString();
}
}



转载于:https://www.cnblogs.com/piaocz/archive/2011/11/10/2244522.html

相关文章:

  • LINQ:是BUG还是~~~
  • JQuery之ContextMenu(右键菜单)
  • cisco路由器乱码的解决办法
  • 这个季节的忧伤,点到为止
  • DHCP Snooping + Dynamic ARP Inspection配置
  • iphone 如何将数据存储到plist(属性列表文件)中
  • *** 2003
  • Oracle认证:Oracle10g恢复试验方法
  • 程序员的职业道德
  • 【算法导论】贪心算法,递归算法,动态规划算法总结
  • 淘宝web服务器tengine
  • 【转载】NuGet 是个什么玩意?
  • 常见的英文口语400句
  • 修改Tomcat 7的用户密码
  • 参数化图形驱动及Web零件库的研究开发
  • 【译】JS基础算法脚本:字符串结尾
  • 0基础学习移动端适配
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • eclipse的离线汉化
  • git 常用命令
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • npx命令介绍
  • 缓存与缓冲
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 小程序01:wepy框架整合iview webapp UI
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​queue --- 一个同步的队列类​
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)fiber的基本认识
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (力扣)循环队列的实现与详解(C语言)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (五)c52学习之旅-静态数码管
  • (五)网络优化与超参数选择--九五小庞
  • (一)WLAN定义和基本架构转
  • (转)EOS中账户、钱包和密钥的关系
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .apk文件,IIS不支持下载解决
  • .net mvc 获取url中controller和action
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET导入Excel数据
  • .net和jar包windows服务部署
  • .考试倒计时43天!来提分啦!
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @RequestMapping处理请求异常
  • []C/C++读取串口接收到的数据程序