JAVA 语言中链表和双向链表的实现

别再死记硬背D算法了!用Python小脚本带你理解DFT核心测试生成 本文通过Python实战拆解D算法,从零构建DFT测试向量生成器,帮助工程师深入理解数字电路测试中的核心概念。文章详细介绍了故障激活、路径敏化和一致性检查三大步骤,并提供了可视化调试方法,使复杂的DFT技术变得直观易懂。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C 语言中是用指针来实现链表结构的,由于JAVA语言不提供指针,所以有人认为在JAVA语言中不能实现链表,其实不然,JAVA语言比C和C 更容易实现链表结构。JAVA语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。 class Node { Object data; Node next; // 指向下一个结点 }   将数据域定义成Object类是因为Object类是广义超类(所有类的祖先),任何类对象都可以给其赋值,增加了代码的通用性。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小,当调用者想得到链表的大小时,不必遍历整个链表,下图是这种链表的示意图。   图一 链表的数据结构   我们可以用类List来实现链表结构,用变量Head、Tail、Length、Pointer来实现表头。存储当前结点的指针时有一定的技巧,Pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点。那么我们为什么要这样做呢?这是因为当我们删除当前结点后仍需保证剩下的结点构成链表,如果Pointer指向当前结点,则会给操作带来很大困难。那么如何得到当前结点呢,我们定义了一个方法cursor(),返回值是指向当前结点的指针。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作。例如reset()方法使第一个结点成为当前结点。insert( Object d )方法在当前结点前插入一个结点,并使其成为当前结点。remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点。 链表类List的源代码如下: import java.io.*; public class List { /* 用变量来实现表头 */ private Node Head=null; private Node Tail=null; private Node Pointer=null; private int Length = 0; public void deleteAll()   /* 清空整个链表 */ { Head = null; Tail = null; Pointer = null; Length = 0; } public void reset()   /* 链表复位,使第一个结点成为当前结点 */ { Pointer = null; } public boolean isEmpty( )   /* 判断链表是否为空 */ { return( Length == 0 ); } public boolean isEnd()   /* 判断当前结点是否为最后一个结点 */ { if ( Length == 0 ) throw new java.lang.NullPointerException(); else if ( Length == 1 ) return true; else return( cursor() == Tail ); } public Object nextNode() /* 返回当前结点的下一个结点的值,并使其成为当前结点 */ { if ( Length == 1 ) throw new java.util.NoSuchElementException(); else if ( Length == 0 ) throw new java.lang.NullPointerException(); else { Node temp = cursor(); Pointer = temp; if ( temp != Tail ) return( temp.next.data ); else throw new java.util.NoSuchElementException(); } } public Object currentNode() /* 返回当前结点的值 */ { Node temp = cursor(); return temp.data; }   public void insert( Object d ) /* 在当前结点前插入一个结点,并使其成为当前结点 */ { Node e = new Node( d ); if ( Length == 0 ) { Tail = e; Head = e; } else { Node temp = cursor(); e.next = temp; if ( Pointer == null ) Head = e; else Pointer.next = e; } Length ; } public int size() /* 返回链表的大小 */ { return ( Length ); } public Object remove() /* 将当前结点移出链表,下一个结点成为当前结点, 如果移出 的结点是最后一个结点,则第一个结点成为当前结点 */ { Object temp ; if ( Length == 0 ) throw new java.util.NoSuchElementException(); else if ( Length == 1 ) { temp = Head.data; deleteAll(); } else { Node cur = cursor(); temp = cur.data; if ( cur == Head ) Head = cur.next; else if ( cur == Tail ) { Pointer.next = null; Tail = Pointer; reset(); } else Pointer.next = cur.next; Length--; } return temp; } private Node cursor() /* 返回当前结点的指针 */ { if ( Head == null ) throw new java.lang.NullPointerException(); else if ( Pointer == null ) return Head; else return Pointer.next; }   public static void main( String[] args ) /* 链表的简单应用举例 */ { List a = new List(); for ( int i = 1; i <= 10; i ) a.insert( new Integer( i ) ); System.out.println( a.currentNode() ); while ( !a.isEnd() ) System.out.println( a.nextNode() ); a.reset(); while ( !a.isEnd() ) { a.remove(); } a.remove(); a.reset(); if ( a.isEmpty() ) System.out.println("There is no Node in List /n"); System.in.println( " You can press return to quit/n" ); try { System.in.read(); // 确保用户看清程序运行结果 } catch( IOException e ) {} } } class Node /* 构成链表的结点定义 */ { Object data; Node next; Node( Object d ) { data = d; next = null; } } 读者还可以根据实际需要定义新的方法来对链表进行操作。双向链表可以用类似的方法实现只是结点的类增加了一个指向前趋结点的指针。 我们可以用这样的代码来实现: class Node { Object data; Node next; Node previous;   Node ( Object d ) { data = d; next = null; previous = null; } } 当然双向链表基本操作的实现略有不同,这里就不再详述了。链表和双向链表的实现方法,也可以用在堆栈和队列的实现中,这里就不再多写了,有兴趣的读者可以将List类的代码稍加改动即可。 参考文献:《网络编程语言JAVA》 孙淑玲、王太权、陈意云 中国科技大学出版社
OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码) 本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。 阅读详情

相关推荐

安装 Claude Code 并接入阿里云百炼(Bailian)

这些工具通常提供可视化界面,只需在设置中填入阿里云百炼的 API Key 和 Base URL 即可,无需配置环境变量。注意:如果你使用的是阿里云百炼的 Coding Plan 套餐,请使用该套餐专属的 API Key 和 Base URL。你可以使用文本编辑器打开该文件,或者在终端使用命令(如 macOS/Linux 下使用 nano ~/.claude/settings.json)。你可以直接用自然语言下达指令,例如:“帮我在这个目录下写一个 Python 脚本,实现两数之和的功能”。

hopsky的博客 1846

Java语言中链表和双向链表的实现

<br />Java语言中链表和双向链表的实现<br />链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。 <br />class Node <br />{ <br />Object data

lmdy2001的专栏 592

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9111

java 语言中链表和双向链表的实现!

     链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。  class Nod

天行健 1357

VS2019手动添加bits/stdc++.h全指南(附解决‘无法打开源文件‘错误)

本文详细介绍了在Visual Studio 2019中手动配置C++万能头文件bits/stdc++.h的完整方法,解决常见的'无法打开源文件'错误。通过分析GCC与MSVC编译器生态差异,提供了纯手动创建和MinGW移植两种可靠方案,并给出详细的步骤、常见错误排查及最佳实践建议,帮助开发者高效配置竞赛开发环境。

weixin_29011395的博客 549

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3388

java双向链表是什么_JAVA 语言中链表和双向链表的实现

一起学习链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C 语言中是用指针来实现链表结构的,由于JAVA语言不提供指针,所以有人认为在JAVA语言中不能实现链表,其实不然,JAVA语言比C和C 更容易实现链表结构。JAVA语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。class Node{O...

weixin_32653933的博客 254

YOLOv13:目标检测的全面攻略与实战指南

本文是关于 YOLOv13 的全攻略文章。先回顾 YOLO 系列发展,点明 YOLOv13 在该系列中的创新地位,阐述其基于 HyperACE、FullPAD 和轻量级卷积替换等技术的独特优势。深入剖析各核心技术原理,通过与其他版本及实际场景对比展现其性能优势。介绍项目结构与使用方式,分享数据增强、锚框优化等实用技巧,并列举安防监控、自动驾驶等领域应用案例。最后总结 YOLOv13 价值,展望目标检测技术未来发展趋势,为读者提供全面的 YOLOv13 学习与实践指导。

邓邓子的博客 3435

JAVA 语言中链表和双向链表的实现(转)

链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指 针来实现链表结构的,由于JAVA语言不提供指针,所以有人认为在JAVA语言中不能实现链 表,其实不然,JAVA语言比C和C++更容易实现链表结构。JAVA语言中的对象引用实际上是 一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以 编写这样的类来实现链表中的结点。 class...

行者买刀 140

使用 Python 调用 GitHub REST API 爬取 GitHub 仓库信息(完整指南)

GitHub 提供了功能强大的 REST API,允许开发者通过编程方式访问 GitHub 上的仓库、用户、提交记录、PR(Pull Request)等信息。GitHub REST API 是 GitHub 官方提供的 API 接口,支持通过 HTTP 请求来操作 GitHub 上的资源。在本文中,我们将使用 Python 编写一个完整的爬虫程序,调用 GitHub 的 REST API 来爬取 GitHub 仓库的信息。目前 GitHub 使用的主要是 v3 版本的 REST API。

2201_76125261的博客 1113

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2732

Java语言中链表和双向链表的实现-Java基础-Java-编程开发

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/javascript"

java专栏 377

Pixhawk2.4.8接口及引脚定义

pixhawk2.4.8接口定义图解

加斯顿工程师的博客 8753

java双向链表的实现_JAVA基础:语言中链表和双向链表的实现(转)

JAVA基础:语言中链表和双向链表的实现(转)[@more@]链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于JAVA语言不提供指针,所以有人认为在JAVA语言中不能实现链表,其实不然,JAVA语言比C和C++更容易实现链表结构。JAVA语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编...

weixin_42389030的博客 91

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用双向链表和数组分别实现栈和队列(Java语言实现)

一、双向链表实现栈和队列 双向链表 比较方便,而且思路清晰的做法是,先使用双向链表实现双向队列。 双向队列可以在头部或者尾部添加或者弹出元素。 随后部分调用双向队列的功能,即可实现栈或队列的功能。(栈:只能从头部添加和弹出元素,链表:只能从头部添加元素,从尾部取出元素)。 // 双向链表 public static class Node<T> { public T value; public Node<T> last; // 前驱指针 public Nod

HLComet_Bay_WC的博客 522

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java语言中链表和双向链表

链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。   class Node 

xiangsuixinsheng的专栏 909

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JAVA实现双向链表

 链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。 class

Athenaer的专栏 4108

Data structure-4 双向链表 DoubleLinkedList--Java语言实现

1. 双向链表简介 Doubly Linked List is a variation of Linked list in which navigation is possible in both ways, either forward and backward easily as compared to Single Linked List. Following are the import

toseektruth的博客 2450

什么是双向链表,双向链表各项功能实现(详解+代码实现)

双向链表各项功能(JAVA语言)实现 结点API设计: 类名: Node 构造方法:Node(T t,Node pre,Node next):创建Node对象 成员变量: T item:存储数据 Node pre:指向上一个结点 Node next:指向下一个结点 **双向链表的API设计 类名:TwoWayLinkList; 构造方法:TwoWayLinkList :创建TwoWay...

qq_43751200的博客 549

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 303
上一篇: SUN:编写高级应用程序
下一篇: JavaPCTM Software 之五
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值