- 浏览: 123010 次
- 性别:
- 来自: 上海
最新评论
DLink 实现一个简单的双向双端链表
与Link一样,假定其之存储非负整数,并提供最能反映双向双端链表特征的方法
实现时利用辅助类DNode实现,DNode是双向节点
基本添加删除数据方法
addFirst, addLast, removeFirst, removeLast
遍历方法:
hasNext, next, resetToBeforeFirst
hasPrevious, previous, resetToAfterLast
遍历时插入,删除方法
insertAfter, removeAfter
insertBefore, removeBefore
其她:
getLength, indexOf
class DNode { private int value; private DNode next; private DNode previous; DNode(int value) { this.value = value; } int getValue() { return value; } void setNext(DNode next) { this.next = next; } DNode getNext() { return next; } void setPrevious(DNode previous) { this.previous = previous; } DNode getPrevious() { return previous; } }
class DLink { private DNode first; private DNode last; private int length; private boolean isBeforeFirst = true; private boolean isAfterLast = false; private DNode current; private static void connect(DNode previous, DNode next) { if(previous != null) previous.setNext(next); if(next != null) next.setPrevious(previous); } void addFirst(int value) { DNode node = new DNode(value); connect(node,first); first = node; if(last == null) last = node; length++; } void addLast(int value) { DNode node = new DNode(value); connect(last,node); last = node; if(first == null) first = node; length++; } int removeFirst() { if(first == null) return -1; int result = first.getValue(); first = first.getNext(); connect(null,first); if(first == null) last = null; length--; return result; } int removeLast() { if(last == null) return -1; int result = last.getValue(); last = last.getPrevious(); connect(last,null); if(last == null) first = null; length--; return result; } int getLength() { return length; } boolean hasNext() { if(isAfterLast) return false; else if(isBeforeFirst) return first != null; else return current.getNext() != null; } int next() { if(isBeforeFirst) { isBeforeFirst = false; current = first; } else current = current.getNext(); if (current == null) isAfterLast = true; return current != null ? current.getValue() : -1; } void resetBeforeFirst() { isBeforeFirst = true; isAfterLast = false; current = null; } boolean hasPrevious() { if(isBeforeFirst) return false; else if(isAfterLast) return last != null; else return current.getPrevious() != null; } int previous() { if(isAfterLast) { isAfterLast = false; current = last; } else current = current.getPrevious(); if(current == null) isBeforeFirst = true; return current != null ? current.getValue() : -1; } void resetAfterLast() { isAfterLast = true; isBeforeFirst = false; current = null; } int removeBefore() { if(!hasPrevious()) return -1; else if (isAfterLast) return removeLast(); else if (current.getPrevious() == first) return removeFirst(); else { int result = current.getPrevious().getValue(); connect(current.getPrevious().getPrevious(),current); length--; return result; } } int removeAfter() { if(!hasNext()) return -1; else if (isBeforeFirst) return removeFirst(); else if (current.getNext() == last) return removeLast(); else { int result = current.getNext().getValue(); connect(current,current.getNext().getNext()); length--; return result; } } void insertBefore(int value) { if(!hasPrevious()) addFirst(value); else if(isAfterLast) addLast(value); else { DNode node = new DNode(value); connect(current.getPrevious(),node); connect(node,current); length++; } } void insertAfter(int value) { if(!hasNext()) addLast(value); else if(isBeforeFirst) addFirst(value); else { DNode node = new DNode(value); connect(node,current.getNext()); connect(current,node); length++; } } int indexOf(int value) { int i = 0; DNode node = first; while(node != null) { if(node.getValue() == value) return i; i++; node = node.getNext(); } return -1; } }
发表评论
-
Tree 红黑树
2008-05-01 17:23 2705红黑树是一种二叉平衡 ... -
Tree 2-3 平衡搜索树
2008-04-25 00:21 2335与2-3-4树 相似,2-3 平衡树是 ... -
Tree 2-3-4 平衡搜索树
2008-04-20 10:53 35002-3-4 平衡树是一种搜索树。每个节点可能会有2,3,4个子 ... -
Graph 图-邻接表法
2008-04-17 00:08 3008用邻接表法表示的双向图(改单向容易,只要修改connect,d ... -
Graph 图-邻接矩阵法
2008-04-16 22:56 3546用邻接矩阵法表示的双向图(改单向容易,只要修改connect, ... -
Heap 堆
2008-04-16 00:28 1482这里的堆不是java中内存分配的堆。只是一种数据结构。 堆是二 ... -
HashTable 基于链表地址法
2008-04-15 00:49 1650功能上于前面两个HashTable(-) ,HashTable ... -
HashTable 基于开放地址法(二)
2008-04-14 19:40 2024与前一个HashTable 基本相同(方法说明请参照它),只是 ... -
HashTable 基于开放地址法
2008-04-13 22:59 1594该HashTable基于定常数组的开放地址法,搜索时采用线性探 ... -
Tree 二叉搜索树
2008-04-11 00:03 1721每个节点最多两个子节点,其中左边节点的值小于该节点的值,右边节 ... -
PriorityQueue 优先级队列
2008-04-06 17:57 3453提供一个基于链表的优先级队列,为了简便,只存储整数,假设数值越 ... -
PriorityQueue 优先级队列
2008-04-06 16:57 4351提供一个基于定长数组的优先级队列,为了简便,只存储整数,假设数 ... -
Queue 队
2008-04-06 13:36 1560指定最大值的队,底层用数组实现构造函数:指定最大容量put:放 ... -
ArrayStack 栈
2008-04-06 12:00 1308用Array实现的栈结构,功能与LinkedStack一致编程 ... -
Array 可变长可变维数组
2008-04-06 11:25 1844一个可以变长,变维的数组(只可以变大),用来替代多维数组基本做 ... -
StackDLink 双向链表
2008-04-05 23:20 1155用LinkedStack实现的双向链表,功能与DLink一致就 ... -
LinkedList 列表
2008-04-05 19:16 1466列表的简单实现,只能存储非负整数List 也属于ADT(抽象数 ... -
ArrayList 列表
2008-04-05 19:01 1209列表的简单实现,只能存储非负整数List 也属于ADT(抽象数 ... -
LinkedQueue 队
2008-04-05 18:43 1857实现了队的最简单功能:先进现出队属于ADT(抽象数据类型),其 ... -
LinkedStack 栈
2008-04-05 17:45 1128LinkedStack栈属于ADT(抽象数据类型),其提供同样 ...
相关推荐
本文将详细探讨如何实现双向链表的增、删、改、查操作,并通过C++编程语言的DLink.cpp文件进行实际应用。 首先,我们需要定义双向链表的节点结构。一个双向链表节点包含两个指针,分别指向其前一个节点和后一个节点...
双向链表的建立 双向链表是一种数据结构,它允许在链表中双向移动。双向链表的建立是通过在链表中添加指向前一个节点和后一个节点的指针来实现的。 在这篇文章中,我们将学习如何使用C语言建立一个双向链表。首先...
### 双向链表的基本操作:创建、查找、添加与删除 #### 1. 双向链表的概念 双向链表是一种线性数据结构,它允许在两个方向上进行遍历,即每个节点包含指向其前一个节点和后一个节点的指针。这种结构为在链表中插入...
### 双向链表内结点的插入(C++) #### 概述 本文将详细介绍如何在C++中实现双向链表中的结点插入操作。双向链表是一种数据结构,其中每个结点包含一个数据元素以及两个指针,分别指向前一个结点和后一个结点。这种...
本篇将深入探讨这两种数据结构及其在C++语言中的实现,通过分析提供的代码文件(dlink.cpp、sqlist.cpp、slink.cpp、cdlink.cpp、cslink.cpp),我们可以学习到不同类型的链表以及一个顺序表的实现方式。 首先,...
【DLink路由器驱动程序】 DLink是一家知名的网络设备制造商,其产品线涵盖了各种类型的路由器,为家庭和企业用户提供网络连接解决方案。路由器驱动程序是确保DLink路由器正常运行的关键组件,它们是操作系统与硬件...
【DLink530tx驱动程序】是一款专为DLink530tx网络适配器设计的驱动软件,它在局域网共享互联环境中扮演着至关重要的角色。DLink530tx是一款早期的以太网卡,适用于桌面电脑,通过这款驱动程序,计算机能够识别并正确...
【Dlink驱动安装工具】是针对Dlink品牌的网络设备,如无线路由器、调制解调器、网络适配器等,提供的一种驱动程序安装辅助工具。驱动程序在计算机硬件和操作系统之间起着桥梁的作用,确保操作系统能够正确识别并充分...
无线路由器Dlink 530 a+ 网络配置备份文件,进入路由器后直接使用恢复功能即可。
根据给定的信息,我们可以推断出本文主要关注的是在数据结构中的数组迭代,但实际上提供的代码示例是关于双向链表的操作。因此,我们将基于这些信息,深入探讨与数组迭代及双向链表相关的知识点。 ### 数据结构数组...
dlink 624+固件,最近的升级版本
Dlink的DNS320B 双盘位网络NAS 1.02版本固件
DLink816固件 DIR816_A1_FW101CNB02.img中文固件 dlink路由器固件
### dlink无线路由器打印机兼容列表解析 #### 一、引言 随着网络技术的发展与办公自动化的普及,无线路由器在家庭及小型办公环境中的应用越来越广泛。为了更好地满足用户的需求,许多厂商推出了支持多种功能的...
Dlink-dir615路由器安装说明 详细图文说明路由器的安装设置使用
- **建立双向循环链表**:根据输入的学生信息,动态地建立一个双向循环链表,其中链表节点存储学生的信息。 - **输出学生成绩信息**:遍历双向循环链表,显示所有学生的详细信息。 - **查找指定学号的学生信息**:...
DLINK_SMARTCONSOLEUTILITY_3.00.15_WIN.EXE,是D-Link交换机管理软件。方便配置交换机参数。
适用于DLINK DIR868L双频云路由下WIFI热点5GHZ无法识别之解决方法
在“dlink with CGI document”这个主题中,我们聚焦于D-Link公司如何利用CGI技术来增强其网络设备,如IP摄像头的功能。 描述中的“cgi开发!”表明我们将探讨CGI的开发过程及其在D-Link产品中的应用。CGI程序通常由...
### Dlink交换机常用配置命令解析 在现代网络架构中,Dlink交换机因其稳定性与易用性而受到广泛欢迎。对于网络工程师来说,熟练掌握Dlink交换机的配置命令至关重要,这不仅能够确保网络的高效运行,还能在遇到问题...