2019独角兽企业重金招聘Python工程师标准>>>

双链集合添加删除算法:

package com.linkes;public class MyLinkeList {
/*** 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com* @author 小沫*//*** 链表集合他是于双链条式进行引用上下家,好处可以知道上家和下家是谁* 利于修改,可以从首部开始删除数据也可以从尾部删除。* 即可从中间指定位置删除。*/private Object[] shou;private Object[] wei;// 默认添加方法public void add(Object obj) {if (shou == null) {//首部为空就new好空间第1个和第三个放null第二个放传递进来的数据shou = new Object[] { null, obj, null };wei = shou;//把尾部指向了首部} else {//如果首部有数据,那么就new好长度为3的空间//把wei放入第一个指向了上家,第二个放入当前的数据,第三个为NULLObject[] objs = new Object[] { wei, obj, null };wei[2] = objs;//尾部的第三个指向了objswei = objs;//objs更新成尾部}}// 从最后面添加方法public void addlast(Object obj) {add(obj);}// 从最前面添加方法public void addFirst(Object obj) {if (shou == null) {shou = new Object[] { null, obj, null };wei = shou;} else {Object[] objs = new Object[] { null, obj, shou };shou[0] = objs;shou = objs;}}// 全部删除方法public void removeAll(int delAll) {if (delAll == 0) {wei = null;//直接制个空就全部删除了shou = null;System.out.println("清除完成");} else {try {throw new Exception("删除失败!delAll需为'0'");} catch (Exception e) {e.printStackTrace();}}}// 从最后面删除方法public Object removeLast() {Object obj = null;if (wei == null) {//没有尾部那么直接返回falsereturn false;}//请问有没有上家if (wei[0] == null) {//如果没有直接把尾跟首制空  因为没有上家意味着只有一个数据wei = null;shou = null;} else {//有上家那就把尾部1里面的数据交给objobj = wei[1];wei = (Object[]) wei[0];//尾部指向了尾部的下标0wei[2] = null;}return obj;}// 从最前面删除方法public Object removeFirst() {Object obj = null;obj = shou[1];if (shou == null) {return false;}if (shou[2] == null) {wei = null;shou = null;} else {shou = (Object[]) shou[2];shou[0] = null;}return obj;}// 从中间删除方法public boolean remove(Object obj) {Object[] objs = shou;while (true) {//找上下家//传进来的数据是不是等于了objs当前的数据if (obj.equals(objs[1])) {break;//如果等于了那就是找到了跳出循环}//如果传进来的数据不是当前数据那么就列出下家objs = (Object[]) objs[2];if (objs == null) {//如果没有下家了那么就跳出循环break;}}if (objs == null) {return false;}if (objs == shou) {//问是不是删除首部removeFirst();} else if (objs == wei) {//是不是删除尾部removeLast();} else {//把当前数据拆分成上家和下家Object[] shang = (Object[]) objs[0];Object[] xia = (Object[]) objs[2];shang[2] = xia;//把上家的下标2引用了下家数据xia[0] = shang;//把下家的下标0引用了上家数据}return true;}private Object[] dq = null;//用hashNext一个个询问数据检索public boolean hashNext() {if (dq == null) {dq = shou;if (dq == null) {return false;}return true;}dq = (Object[]) dq[2];if (dq == null) {return false;}return true;}//用Next进行拿到值public Object Next() {return dq[1];}
}

测试类:

ackage com.linkes;public class Test {public static void main(String[] args) {MyLinkeList linke = new MyLinkeList();linke.add("a");linke.addlast("b");linke.addFirst("c");linke.addFirst("d");linke.addFirst("e");linke.addFirst("f");linke.addFirst("g");linke.removeAll(1);while(linke.hashNext()){System.out.println(linke.Next());}}}

转载于:https://my.oschina.net/kaige123/blog/1383036

双链集合添加删除算法相关推荐

  1. python集合的并集、交集_Python 集合set()添加删除、交集、并集、集合操作详解

    1.在Python中set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的 ...

  2. python集合运算_Python 集合set()添加删除、交集、并集、集合操作详解

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法 ...

  3. 2020-10-14 B树 概念添加删除笔记

    B树在考试中几乎不考察,但是可以作为对红黑树的辅助理解,红黑树 你心里有没有B树? B树:英文名字叫做B-tree,中间的短线是英文连接符,只是翻译的时候将短线翻译成了减号. 全称Balance-tr ...

  4. MongoDB 数据库、集合创建删除与文档插入

    本文章主要介绍mongodb的基本命令,前提条件,你的本地已经安装了mongo. 一.基本命令使用(主要是创建,增删改.) 0.mongoDb统计信息 获得关于MongoDB的服务器统计,需要在Mon ...

  5. MongoDB 教程二: 添加, 删除,查询 shell命令

    视频:MongoDB 教程二: 添加, 删除,查询 shell命令 MongoDB Shell 常用操作命令 MonoDB   shell命令操作语法和JavaScript很类似,其实控制台底层的查询 ...

  6. linux Enterprise5 添加删除程序无法正常使用 解决

    前一段时间刚装上rhel5 server的时候,发现system-config-packages工具的browse和search功能都不能用,看了syd168兄写的"彻底解决Fedora 6 ...

  7. java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化

    1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...

  8. linux添加删除用户命令,Linux命令之useradd和userdel(添加、删除用户)

    一.[useradd]:添加用户命令 1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s sh ...

  9. 【转载苏飞的博客】一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)

    一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)  by sufeinet, 地址: cnblogs.com/sufei/archive/2011/09/13/2174716.html ...

最新文章

  1. 黑马vue---1-7、vue杂记
  2. 查看本地文档的一些方法
  3. qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...
  4. 实验协作的时候需要做什么?
  5. pip install mysqlclient报错: error: command ‘gcc‘ failed with exit status 1 OSError: mysql_config no
  6. 用Eclipse做J2Me开发的前期配置
  7. 孟菲斯风格海报设计素材,艺术一点点
  8. 测试 软通动力软件测试机试_5000字长文,计算机保研机试介绍及准备策略!高分过过过!...
  9. 【简报】超棒的免费Web字体服务:Adobe Edge Web字体
  10. 怎么画单极交流放大电路波形图_直流电和交流电的电流方向
  11. mysql 5.1.x 比较 5.6.x版本的日志
  12. numpy教程:排序、搜索和计数
  13. HIT软件构造复习 lab篇
  14. 机器学习 周志华 第三章 推导详细过程
  15. 由pushViewController说起可能出线的各种死法
  16. python3+selenium3+IE自动化遇IE11下载弹窗遇阻
  17. Tivoli Workload Scheduler (TWS)
  18. PHPUnit简介及使用
  19. CSS实现文字垂直居中
  20. 安卓数据转移到iphone老是中断_如何把安卓手机上的数据转移到 iPhone、iPad?

热门文章

  1. 我刚做的一个TreeView的CheckBox进行选中插入数据库,从数据库中读取数据后让CheckBox勾选的代码!...
  2. 12/100. Diameter of Binary Tree
  3. Angularjs1.x 项目结构
  4. c++ explicit
  5. Vue CLI 3 脚手架搭建
  6. jquery最快速入门文档
  7. hdu 5008 Boring String Problem(后缀数组+rmq)
  8. EPUB.js 解决图片裁剪问题(缩放问题)
  9. YII 增加登陆认证
  10. C#pictureBox公共控件的使用