链表结构;
数据部分:保存的是该结点的实际数据
地址部分:保存的是下一个结点的地址
操纵数据:
public class DATA2 { String key; String name; int age; }
具体操作:
/** * 链表类 * @author Administrator * */ public class CLType { DATA2 nodeData=new DATA2(); CLType nextNode; /** * 在链表结构中追加结点的代码 * @param head * @param nodeData * @return */ CLType CLAddEnd(CLType head,DATA2 nodeData){ CLType node,htemp; if((node=new CLType())==null){ System.out.println("申请内存失败!\n"); return null; } else{ node.nodeData=nodeData;//保存数据 node.nextNode=null;//设置结点引用为空,即为表尾 if(head==null){ head=node; return head; } htemp=head; while(htemp.nextNode!=null){ htemp=htemp.nextNode; } htemp.nextNode=node; return head; } } CLType CLAddFirst(CLType head,DATA2 nodeData){ CLType node; if((node=new CLType())==null){ System.out.println("申请内存失败"); return null; }else{ node.nodeData=nodeData; node.nextNode=head;//指向头引用所指结点 head=node;//头引用指向新增结点 return node; } } CLType CLFindNode(CLType head,String key){ CLType htemp; htemp=head; while(htemp!=null){ if(htemp.nodeData.key.compareTo(key)==0){ return htemp; } htemp=htemp.nextNode;//处理下一个结点 } return null; } CLType CLInsertNode(CLType head,String findkey,DATA2 nodeData){ CLType node,nodetemp; if ((node=new CLType())==null) { System.out.println("申请内存失败"); return null; } node.nodeData=nodeData; nodetemp=CLFindNode(head, findkey); if(nodetemp!=null){ node.nextNode=nodetemp.nextNode; nodetemp.nextNode=node; }else{ System.out.println("未找到插入位置"); } return head; } int CLDeleteNode(CLType head,String key){ CLType node,htemp;//node保存删除结点的前一结点 htemp=head; node=head; while(htemp!=null){ if(htemp.nodeData.key.compareTo(key)==0){ node.nextNode=htemp.nextNode; htemp=null; return 1; }else{ node=htemp; htemp=htemp.nextNode; } } return 0; } int CLLength(CLType head){ CLType htemp; int Len=0; htemp=head; while(htemp!=null){ Len++; htemp=htemp.nextNode; } return Len; } /** * show all node */ void CLAllNode(CLType head){ CLType htemp; DATA2 nodeData; htemp=head; System.out.println("共有结点:"+CLLength(head)); while(htemp!=null){ nodeData=htemp.nodeData; System.out.println("("+nodeData.name+","+nodeData.age+")"); htemp=htemp.nextNode; } } }
嗯,经过对比,可以发现,线性表的操作中,主要是对数组的操作,而链表的操作呢?是对引用的操作,比如node,就理解为指向某一个结点的引用,然后node.noteData是指数据,node.nextNode是指指向下一个结点的引用.
然后就很好理解了.
相关推荐
### 链表结构在学生成绩管理中的应用 #### 题目解析与核心概念 链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。本案例中,链表被用于管理学生信息,包括姓名、学号、性别...
用链表结构的有序表表示某商场家电的库存模型。当有提货或进货时 需要对该链表进行维护。每个工作日结束之后,将该链表中的数据以文 件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链 表结构的有序...
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
在这个“易语言简单UI框架链表结构”项目中,我们主要探讨的是如何利用易语言来构建一个用户界面(UI)框架,并且涉及到链表数据结构的应用。 链表是计算机科学中的一种数据结构,它不同于数组,不需要连续的内存...
-数组和链表结构(Python)" Python列表是一个非常常用的数据结构,但是它究竟是数组还是链表实现的?在Python中,列表是使用链表结构实现的,但是在某些情况下,也可以使用数组结构来实现。那么,为什么Python列表...
总结来说,"c++链表结构"涉及的知识点包括:链表的概念、链表节点的定义、链表的创建、插入、删除和遍历操作,以及如何在Visual Studio 2010环境下编写和编译C++程序。掌握这些基础知识对于理解和使用数据结构以及...
C语言常见课后题目,完成基于链表结构的学生成绩管理系统
### 基于多链表结构的嵌入式系统内存管理 #### 摘要与研究背景 在复杂的嵌入式系统中,由于任务数量众多且功能差异显著,导致动态内存管理成为一大挑战。传统的内存管理方法往往会造成大量的内存碎片和资源浪费,...
### 双向链表结构 #### 知识点概述 双向链表是一种常见的数据结构,在计算机科学中占有重要地位。与单向链表相比,双向链表中的每个节点都包含两个指针,一个指向其前驱节点,另一个指向其后继节点。这种结构使得...
在这个主题中,我们将深入探讨如何使用QT代码实现链表结构,特别是单向链表和双向链表。 首先,我们要理解链表的概念。链表是一种线性数据结构,与数组不同,它的元素在内存中并不连续存储。每个元素称为节点,包含...
本压缩包文件"数组的扩容和链表结构.zip"包含了关于Java数组扩容和链表结构存储的相关知识点,我们将详细探讨这两个主题。 首先,我们来看Java数组。数组是一种线性数据结构,它在内存中连续存储相同类型的数据元素...
在本主题中,我们将深入探讨如何使用链表结构来实现一个学生成绩管理系统。这个系统由数据结构专家刘小晶教授举例讲解,旨在帮助我们理解数据结构在实际问题中的应用,特别是链表这一核心概念。链表是一种非连续、非...
.链表结构.wmv .链表结构.wmv .链表结构.wmv.链表结构.wmv
今天,我们将深入探讨C语言中链表数组的实现和数组与链表结构的对比,并结合个人理解和实践经验来分析它们的优缺。 一、链表数组的实现 链表是一种常见的数据结构,它由多个节点组成,每个节点包含数据域和指针域...
Redis中的双链表结构是其数据结构之一,用于支持高效的数据操作。双链表的特点在于每个节点都包含指向前一个和后一个节点的指针,这样可以在链表的任一位置进行插入和删除操作,而不需要像单链表那样从头开始遍历。 ...
顺序结构动态链表结构下的一元多项式的加法减法乘法的实现 在数据结构课程设计中,实现一元多项式的加法、减法、乘法操作是非常重要的一部分。在本文中,我们将讨论如何使用顺序结构和动态链表结构实现一元多项式的...
Linux内核中的链表结构是系统中数据组织和管理的核心组件之一,特别是在2.6.x版本的内核中。链表作为一种动态数据结构,允许高效地插入和删除元素,而无需像数组那样预先分配固定大小的内存。在Linux内核中,链表...
当需要复用链表结构时,如果链表结构和用户数据混编,就很难实现通用的复用机制。 其次,为了实现链表结构的复用,需要分离用户数据和链表结构数据。为了方便链表代码的复用,使用函数指针将链表的基础操作封装起来...
本案例重点展示了如何利用顺序结构和动态链表结构实现一元多项式的加法和减法操作。下面我们将深入探讨这些知识点。 首先,一元多项式是由常数项和变量项组成的数学表达式,例如 `ax^n + bx^(n-1) + ... + cx^2 + ...