双链集合添加删除算法:
package com.linkes;
public class MyLinkeList {
private Object[] shou;
private Object[] wei;
public void add(Object obj) {
if (shou == null) {
shou = new Object[] { null, obj, null };
wei = shou;
} else {
Object[] objs = new Object[] { wei, obj, null };
wei[2] = objs;
wei = 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) {
return false;
}
if (wei[0] == null) {
wei = null;
shou = null;
} else {
obj = wei[1];
wei = (Object[]) wei[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) {
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;
xia[0] = shang;
}
return true;
}
private Object[] dq = null;
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;
}
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());
}
}
}
分享到:
相关推荐
集合算法通常涉及到数据结构如数组、链表、树、图等,以及在这些结构上的操作,如查找、排序、插入、删除等。 1. **数组**:数组是最基础的数据结构,它提供了固定大小的元素集合。在C++中,数组可以用来实现静态...
不可变集合继承自 Collection 接口,而可变集合则继承自 MutableCollection 接口,并扩展了对元素的添加和删除等操作。 2. 初始化集合:Kotlin 允许以多种方式初始化集合,例如使用 `listOf()`、`mutableListOf()`...
《算法集合全》一书由Thomas Niemann撰写,是一份详尽的算法指南,主要聚焦于排序和搜索算法。本书不仅提供了直观且简洁的算法描述,还深入浅出地介绍了必要的理论知识,使读者能够在理解的基础上掌握算法的核心原理...
### Java集合与算法知识点 #### 一、集合接口与实现 **Java集合框架**是Java标准库的一个核心组成部分,它提供了存储和操作集合的一系列接口和实现类。这些集合类库的设计遵循了一些基本的原则,例如将接口与实现...
- 可能还会有性能分析,如讨论不同集合操作的时间复杂度,如添加、删除通常为O(1),而遍历集合可能为O(n)。 学习这部分内容有助于提升算法思维和编程能力,理解集合抽象数据类型的实现原理,以及如何在实际问题中...
在实际开发中,我们经常需要对集合进行操作,例如添加元素、删除元素、查找元素等。Java提供了丰富的API来支持这些操作,如`add()`, `remove()`, `contains()`, `get()`, `size()`等。此外,集合框架还提供了许多...
集合运算算法 本文档主要讨论集合的并、交和差运算的算法,通过设计一个能演示集合运算的程序,实现集合的创建、增删改查,以及集合间的并、交和差运算。 一、需求分析 在设计集合运算程序时,需要考虑以下几个...
列表的应用也十分广泛,如实现动态数组、堆栈、队列等数据结构,以及用作一般编程中的数据集合。列表的灵活性使其在需要频繁插入或删除中间元素的场景下,如事件监听器列表或数据库中索引的实现等,显得尤为适用。 ...
这份“常见数据结构与算法笔试面试题大集合”涵盖了这一领域的核心概念,旨在帮助求职者更好地准备相关考试和面试。 1. **数组**:数组是最基础的数据结构,它提供了一种在内存中存储和访问固定数量元素的方式。...
总之,Java有序非循环双向链表是数据结构和算法学习中的重要内容,它在实际应用中广泛用于高效地管理动态数据集合,如缓存、队列、优先队列等。理解其工作原理并能熟练运用,对于提升Java编程能力至关重要。
2.1 C# 和 Python 中的集合结构:这部分会讲解如何在C#和Python中创建和操作集合,以及其基本操作如添加、删除和查询元素。 2.2 两个数组的交集:集合可以方便地找出两个数组的交集,文档将展示如何利用集合的特性...
在软件开发中,按索引访问集合是一项基础且重要...总结来说,选择按索引访问集合的算法应根据具体应用场景的需求来权衡时间复杂度、空间利用率和操作的便捷性。在实际开发中,还需要考虑代码的可读性、维护性和扩展性。
2. **列表删除**:列表(List)是易语言中更灵活的数据结构,支持动态添加和删除元素。使用`列表删除`命令可以轻松地从列表中移除指定的元素。例如,`列表删除(列表变量, 元素索引)`将删除列表中指定位置的元素。 3...
图的遍历、添加、删除、保存等操作都是算法中的重要课题。 17. 回溯算法是一种试探法,通过递归探索所有可能的解来寻找问题的解。 18. 克鲁斯卡尔算法和普里姆算法(prim算法)是用于最小生成树问题的两种不同算法...
本文将围绕KSP算法的实现,尤其是双向图算法(删除法)和单向无环图算法(附加节点法),进行详细介绍。 首先,我们来理解KSP的基本概念。在图G=(V,E)中,如果存在两个顶点s和t,KSP任务是找出从s到t的K条具有不同...
综上所述,"可以添加删除联系人的电话簿tel"项目涉及到C++的面向对象编程、容器使用、I/O操作、算法应用、用户交互以及测试与调试等多个知识点。通过实践这个项目,开发者不仅可以深化对C++的理解,还能提升软件工程...
在实现集合运算器时,开发者可能选择了链表作为基础数据结构,因为链表允许高效地添加和删除元素,尤其是当元素数量变化时。链表由节点组成,每个节点包含数据和指向下一个节点的引用。这使得插入和删除操作的时间...
这种结构允许快速访问任意顶点的出边和入边,适合进行各种图操作,如添加、删除边,以及执行深度优先搜索等。 深度优先搜索在十字链表上的实现通常涉及以下步骤: 1. 初始化:设置一个栈,用于存储待访问的顶点,...
集合运算是集合操作的基础,包括集合的并交差、集合合并、删除、判断子集、求补集等操作。在本文中,我们将详细介绍集合运算的实现方法,并提供相应的代码实现。 1. 集合的定义 在C语言中,我们可以使用结构体来...
Swift的集合和算法设计考虑了性能,例如,数组的插入和删除操作在大多数情况下都具有很好的性能。此外,Swift的懒加载特性允许在需要时才计算序列的元素,提高了效率。 总结,"Swift常用的序列和集合算法"这一主题...