`
l4432848
  • 浏览: 255323 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

双链集合添加删除算法

    博客分类:
  • java
阅读更多

双链集合添加删除算法:

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放入第一个指向了上家,第二个放入当前的数据,第三个为NULL
			Object[] objs = new Object[] { wei, obj, null };
			wei[2] = objs;//尾部的第三个指向了objs
			wei = 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) {//没有尾部那么直接返回false
			return false;
		}
		//请问有没有上家
		if (wei[0] == null) {
			//如果没有直接把尾跟首制空  因为没有上家意味着只有一个数据
			wei = null;
			shou = null;
		} else {
			//有上家那就把尾部1里面的数据交给obj
			obj = wei[1];
			wei = (Object[]) wei[0];//尾部指向了尾部的下标0
			wei[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());
		}
		
	}
	
}
分享到:
评论

相关推荐

    01 常用集合算法.rar_常用集合算法

    集合算法通常涉及到数据结构如数组、链表、树、图等,以及在这些结构上的操作,如查找、排序、插入、删除等。 1. **数组**:数组是最基础的数据结构,它提供了固定大小的元素集合。在C++中,数组可以用来实现静态...

    Kotlin 的算法集合

    不可变集合继承自 Collection 接口,而可变集合则继承自 MutableCollection 接口,并扩展了对元素的添加和删除等操作。 2. 初始化集合:Kotlin 允许以多种方式初始化集合,例如使用 `listOf()`、`mutableListOf()`...

    算法集合全.pdf

    《算法集合全》一书由Thomas Niemann撰写,是一份详尽的算法指南,主要聚焦于排序和搜索算法。本书不仅提供了直观且简洁的算法描述,还深入浅出地介绍了必要的理论知识,使读者能够在理解的基础上掌握算法的核心原理...

    Java笔记-集合与算法

    ### Java集合与算法知识点 #### 一、集合接口与实现 **Java集合框架**是Java标准库的一个核心组成部分,它提供了存储和操作集合的一系列接口和实现类。这些集合类库的设计遵循了一些基本的原则,例如将接口与实现...

    算法-集合- 集合与集合运算(包含源程序).rar

    - 可能还会有性能分析,如讨论不同集合操作的时间复杂度,如添加、删除通常为O(1),而遍历集合可能为O(n)。 学习这部分内容有助于提升算法思维和编程能力,理解集合抽象数据类型的实现原理,以及如何在实际问题中...

    java 集合

    在实际开发中,我们经常需要对集合进行操作,例如添加元素、删除元素、查找元素等。Java提供了丰富的API来支持这些操作,如`add()`, `remove()`, `contains()`, `get()`, `size()`等。此外,集合框架还提供了许多...

    集合的并、交和差运算的算法.docx

    集合运算算法 本文档主要讨论集合的并、交和差运算的算法,通过设计一个能演示集合运算的程序,实现集合的创建、增删改查,以及集合间的并、交和差运算。 一、需求分析 在设计集合运算程序时,需要考虑以下几个...

    栈和列表的插入和删除

    列表的应用也十分广泛,如实现动态数组、堆栈、队列等数据结构,以及用作一般编程中的数据集合。列表的灵活性使其在需要频繁插入或删除中间元素的场景下,如事件监听器列表或数据库中索引的实现等,显得尤为适用。 ...

    常见数据结构与算法笔试面试题大集合

    这份“常见数据结构与算法笔试面试题大集合”涵盖了这一领域的核心概念,旨在帮助求职者更好地准备相关考试和面试。 1. **数组**:数组是最基础的数据结构,它提供了一种在内存中存储和访问固定数量元素的方式。...

    Java有序非循环双向链表算法实例

    总之,Java有序非循环双向链表是数据结构和算法学习中的重要内容,它在实际应用中广泛用于高效地管理动态数据集合,如缓存、队列、优先队列等。理解其工作原理并能熟练运用,对于提升Java编程能力至关重要。

    《数据结构与算法 LeetCode刷题宝典》.docx

    2.1 C# 和 Python 中的集合结构:这部分会讲解如何在C#和Python中创建和操作集合,以及其基本操作如添加、删除和查询元素。 2.2 两个数组的交集:集合可以方便地找出两个数组的交集,文档将展示如何利用集合的特性...

    按索引访问集合的3种算法[总结].pdf

    在软件开发中,按索引访问集合是一项基础且重要...总结来说,选择按索引访问集合的算法应根据具体应用场景的需求来权衡时间复杂度、空间利用率和操作的便捷性。在实际开发中,还需要考虑代码的可读性、维护性和扩展性。

    易语言算法入门3删除运算

    2. **列表删除**:列表(List)是易语言中更灵活的数据结构,支持动态添加和删除元素。使用`列表删除`命令可以轻松地从列表中移除指定的元素。例如,`列表删除(列表变量, 元素索引)`将删除列表中指定位置的元素。 3...

    一步一步写算法

    图的遍历、添加、删除、保存等操作都是算法中的重要课题。 17. 回溯算法是一种试探法,通过递归探索所有可能的解来寻找问题的解。 18. 克鲁斯卡尔算法和普里姆算法(prim算法)是用于最小生成树问题的两种不同算法...

    K最短路算法实现(KSP)

    本文将围绕KSP算法的实现,尤其是双向图算法(删除法)和单向无环图算法(附加节点法),进行详细介绍。 首先,我们来理解KSP的基本概念。在图G=(V,E)中,如果存在两个顶点s和t,KSP任务是找出从s到t的K条具有不同...

    可以添加删除联系人的电话簿tel

    综上所述,"可以添加删除联系人的电话簿tel"项目涉及到C++的面向对象编程、容器使用、I/O操作、算法应用、用户交互以及测试与调试等多个知识点。通过实践这个项目,开发者不仅可以深化对C++的理解,还能提升软件工程...

    集合运算器

    在实现集合运算器时,开发者可能选择了链表作为基础数据结构,因为链表允许高效地添加和删除元素,尤其是当元素数量变化时。链表由节点组成,每个节点包含数据和指向下一个节点的引用。这使得插入和删除操作的时间...

    深度优先算法和十字链表

    这种结构允许快速访问任意顶点的出边和入边,适合进行各种图操作,如添加、删除边,以及执行深度优先搜索等。 深度优先搜索在十字链表上的实现通常涉及以下步骤: 1. 初始化:设置一个栈,用于存储待访问的顶点,...

    集合的并交差,集合合并,删除,判断子集,求补集

    集合运算是集合操作的基础,包括集合的并交差、集合合并、删除、判断子集、求补集等操作。在本文中,我们将详细介绍集合运算的实现方法,并提供相应的代码实现。 1. 集合的定义 在C语言中,我们可以使用结构体来...

    Swift常用的序列和集合算法_Swift_下载.zip

    Swift的集合和算法设计考虑了性能,例如,数组的插入和删除操作在大多数情况下都具有很好的性能。此外,Swift的懒加载特性允许在需要时才计算序列的元素,提高了效率。 总结,"Swift常用的序列和集合算法"这一主题...

Global site tag (gtag.js) - Google Analytics