《Algorithms》—— 链表实现栈,队列,背包
链表
- 链表的定义
- 链表实现栈
- 链表实现队列
- 链表实现背包
链表的定义
链表是一种递归的数据结构,它或者为空(null),或者是指向一个节点(node)的引用,该结点含有一个泛型的元素和一个指向另一条链的引用。
首先用一个嵌套类来定义结点的抽象数据:
class Node {Item item; //泛型,节点存放的元素Node nextNode; //递归,指向下一个节点}
链表和数组一样(数组是java内部支持的,链表不是),更好地封装对象和定义了我们所需的属性和方法,是实现其他抽象数据类型和高级算法的基石。
链表实现栈
import java.util.Iterator;public class StackWithNode<Item> implements Iterable<Item> {private class Node{Item item; //泛型,节点存放的元素Node nextNode; //递归,指向下一个节点}private Node first; // 栈顶private int num; // 元素数量// 判断是否为空public boolean isEmpty(){return first == null; // 或 num == 0;}// 容量public int size(){return num;}// 向栈顶添加元素public void push(Item item){Node oldFirst = first; // 1、先把原来的栈顶元素变为旧元素oldFirst(这里是引用类型,所以只要将引用指向内存就行了)first = new Node(); // 2、创建一个新元素,令它为firstfirst.item = item; // 3、压入的值赋给新元素first.nextNode = oldFirst; // 4、令新元素成为旧元素的前置元素num++; // 5、容量扩大}// 从栈顶删除元素public Item pop(){Item item = first.item; // 1、保存栈顶元素的Itemfirst = first.nextNode; // 2、删除栈顶元素num--; // 3、容量减小return item; // 4、返回弹出的元素}@Overridepublic Iterator<Item> iterator() {//Iterator迭代器是什么,它是一个实现了hasNext()和next()方法的类的对象return new StackWithNodeIterator();}private class StackWithNodeIterator implements Iterator<Item>{private Node current = first;@Overridepublic boolean hasNext() {return current != null;}@Overridepublic Item next() {Item item = current.item; //1、获取当前元素的itemcurrent = current.nextNode; //2、指针指向下一个return item; //3、返回这个item}}
}
链表实现队列
先进先出队列(简称队列)是一种基于先进先出(FIFO)策略的集合类型。队列的实现和栈是一样的,只是栈只有一个出口(first),队列两头都可以出(first、last),所以在队列为空的时候,要重新定义这两端的关系。
import java.util.Iterator;public class QueueWithNode<Item> implements Iterable<Item> {private class Node{Item item;Node nextNode;}private Node first; // 指向最早添加的结点的链接,队头private Node last; // 指向最晚添加的结点的链接,队尾private int num; // 队列中的元素数量// 判断是否为空public boolean isEmpty(){return first == null; // 或 num == 0;}// 大小public int size(){return num;}// 入队,链表尾部插入元素public void enqueue(Item item){Node oldLast = last;last = new Node();last.item = item;last.nextNode = null;if (isEmpty()) first = last; // 如果为空,列头元素就等于列尾元素else oldLast.nextNode = last;num++;}// 出队,链表头部删除元素public Item dequeue(){Item item = first.item;first = first.nextNode;if(isEmpty()) last = null; // 如果为空,列尾元素为空num--;return item;}@Overridepublic Iterator<Item> iterator() {return new QueueWithNodeIterator();}private class QueueWithNodeIterator implements Iterator<Item>{private Node current = first;@Overridepublic boolean hasNext() {return current != null;}@Overridepublic Item next() {Item item = current.item; //1、获取当前元素的itemcurrent = current.nextNode; //2、指针指向下一个return item; //3、返回这个item}}
}
链表实现背包
背包是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例手机元素并迭代遍历所有收集到的元素。迭代的顺序不确定并且与用例无关。
背包就相当于一个只进不出的栈,把栈中的 push() 改为 add() ,并且去掉 pop() 就行了。
import java.util.Iterator;public class BagWithNode<Item> implements Iterable<Item> {private class Node{Item item;Node nextNode;}private Node first;public void add(Item item){Node oldFirst = first;first = new Node();first.item = item;first.nextNode = oldFirst;}@Overridepublic Iterator<Item> iterator() {return new BagWithNodeIterator();}private class BagWithNodeIterator implements Iterator<Item>{private Node current = first;@Overridepublic boolean hasNext() {return current != null;}@Overridepublic Item next() {Item item = current.item; //1、获取当前元素的itemcurrent = current.nextNode; //2、指针指向下一个return item; //3、返回这个item}}}
《Algorithms》—— 链表实现栈,队列,背包相关推荐
- 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解
一.解释定义 1. 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 如果还是不太清楚下面会举例说明的. 2. 数据存储结 ...
- Java实现单链表、栈、队列三种数据结构
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...
- java中队列链表栈的作用_Java用链表实现栈和队列
1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...
- 数据结构之数组、链表、栈和队列
1.数组 1.1:概念 数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据.这里我们要抽取出三个跟数组相关的关键词:线性表,连续内存空间,相同数据类型:数组具有连续的内存空 ...
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表
单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...
- python链表实现栈_使用python实现数组、链表、队列、栈
引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...
最新文章
- areas where akka is being deployed into production
- MIT机器狗再进化,碎石冰面上跑也不打滑,这次真的稳如狗了
- Mysql数据库主从及主主复制配置演示
- 在线实时大数据平台Storm开发之wordcount
- 点击了SAP CRM HANA report超链接,背后都发生了什么
- 2个字节能存多少个16进制_MySql中的varchar长度究竟是字节还是字符
- 图片延迟加载和滑动翻页
- React使用antd Table生成层级多选组件
- win11用户账户如何取消 windows11取消用户账户的设置方法
- 按键精灵引流脚本实操
- PBR 六 材质参数
- Dex.top“50计划”新玩法,能否让行业格局重新洗牌?
- 时间局部性和空间局部性
- Class6 基于ECS和NAS搭建个人网盘
- Java及依赖和Maven
- 专业课课本复习(数电,通原,数信,信号与系统,数据结构)
- 『每日AI』马化腾丨中国互联网已从C2C进化为KFC!
- 如何在Power BI Desktop中创建词云生成器
- SAXReader的主要用法(XML)
- cn2an:中文数字转阿拉伯数字
热门文章
- 装修弱电箱,路由器和交换机该怎么放?
- The idea of ​​router network configuration
- SQL Server安全机制–如何控制用户能够在报告中查看哪些数据
- oracle ola_Ola HallengrenSQL Server维护解决方案–安装和SQL Server备份解决方案
- aws rds监控慢sql_将AWS S3存储桶与AWS RDS SQL Server集成
- ssrs筛选器_SSRS ReportServer:服务性能计数器指南
- 再次测试用OLW本地的桌面应用撰写博客园博文
- centos7 安装sqlserver驱动以及扩展
- Javascript--位运算符
- Form验证之简单应用