链表中的每个节点包括两个部分:数据域和指针域。顾名思义,数据域存储数据元素,指针域存储的是指向下一结点的指针。因而,链表的存储空间不一定是连续的,其数据元素的逻辑顺序是通过指针链接次序实现的,链表的查寻操作将没有数组那样简单,但插入与删除操作将比较方便。
下面是对单向链表进行增、删、改、查操作的代码:
package com20130324C;
/**
* 定义一个链表类
* @author Administrator
*
*/
public class LinkNode {
public LinkNode root;
public LinkNode next;
public Object data;
public LinkNode mi ;
/**
* 添加一个结点
* @param obj 待添加结点的数据
*/
public void add(Object obj){
mi = new LinkNode();
mi.data = obj;
//判断头结点是否为空
if(root==null){
root = mi;
next = root;
}
else{
next.next = mi;
//让next指向当前节点的下一结点
next = next.next;
}
}
/**
* 打印出链表
*/
public void print(){
mi = root;
while(mi!=null){
data = mi.data;
System.out.println(data);
mi = mi.next;
}
}
/**
* 删除链表中的某个元素
* @param index 要删除的元素的位置
* @return 要删除位置的数据
*/
public Object delete(int index){
//找到的是待删除的前一个
index--;
mi = root;
Object data;
//判断是否是删除root
if(index==0){
data = mi.data;
root = mi.next;
}
else{
//因为最开始mi指向root,所以index--
index--;
for( ;index>0;index--){
mi = mi.next;
}
data = mi.next.data;
mi.next = mi.next.next;
}
return data;
}
/**
* 查找链表中第index位的节点数据
* @param index 待查找结点的位置
* @return 该结点的数据
*/
public Object get(int index){
index--;
mi = root;
Object data;
if(index==0){
data = mi.data;
}
else{
index--;
//找到在index位的结点
for( ;index>0;index--){
mi = mi.next;
}
data = mi.data;
}
return data;
}
/**
* 改变指定位置结点的数据
* @param obj 新数据
* @param index 待改变结点的位置
*/
public void modify(Object obj,int index){
index--;
mi = root;
if(index==0){
mi.data = obj;
}
else{
index--;
//找到在index位的结点
for( ;index>0;index--){
mi = mi.next;
}
mi.next.data = obj;
}
}
}
package com20130324C;
import java.util.Scanner;
/**
* 定义一个链表结点类
* @author Administrator
*
*/
public class MyList {
public static void main(String args[]){
LinkNode link = new LinkNode();
//创建一个链表
for(int i=0;i<10;i++){
link.add("姓名"+i);
}
link.print();
Scanner input = new Scanner(System.in);
System.out.println("请输入要增加的元素个数及数据:");
int len1 = input.nextInt();
for(int i=0;i<len1;i++){
String s = input.next();
link.add(s);
}
link.print();
System.out.println("请输入要删除元素的位置:");
int index0 = input.nextInt();
Object data = link.delete(index0);
System.out.println(data);
System.out.println("请输入要找的元素的位置:");
int index1 = input.nextInt();
Object data1 = link.get(index1);
System.out.println(data1);
System.out.println("请依次输入要改变的元素的数据和位置:");
String s = input.next();
int index2 = input.nextInt();
link.modify(s, index2);
link.print();
}
}
分享到:
相关推荐
循环链表是一种特殊的链表结构,其特点在于链表的最后一个节点的指针域不再指向空,而是指向前一个节点,这样整个链表形成一个闭合的环形结构。在循环链表中,由于没有明显的尾端,因此在进行算法操作时需要特别注意...
在本文中,我们将深入探讨线性单链表的创建和操作,包括链表结点的定义、链表指针类型、创建链表结点的函数、创建线性表的函数、向链表末尾追加元素、获取链表元素地址、删除链表元素以及清空链表。 首先,链表结点...
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来。本篇文章将深入探讨单向链表的基本概念,包括其结构体定义、如何...
【链表】是一种重要的数据结构,它不像数组那样在内存中连续存储,而是通过节点间的指针连接起来。链表的每个节点包含数据和指向下一个节点的指针,这种结构使得链表在插入和删除操作上相比数组更具优势,但同时也...
封装了链表的操作,功能有链表的创建,节点的添加(附加),插入(前插、后插和插入到链表头部),删除,得到节点数据,得到节点位置,得到节点总数,释放链表。 使用了类模版,使得可以让节点中的数据为任意类型,...
链表操作详解 链表是一种基本的数据结构,它在计算机科学和软件工程中有着广泛的应用。链表可以分为单链表、双链表和循环链表三种,下面我们将详细介绍这些链表的操作。 单链表 单链表是一种基本的链表结构,其中...
在编程领域,有序链表序列的合并是一个常见的问题,尤其在数据结构和算法的学习中占有重要地位。这个题目“PTA 两个有序链表序列的合并”主要涉及到链表的操作和合并策略,这对于理解和掌握链表操作有极大的帮助。...
在编程领域,链表是一种非常基础且重要的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。本题目的核心是利用链表的基本操作找到两个链表的交集,这是一个常见的算法问题,对于理解和掌握...
在这个项目中,我们讨论的是如何在STM32F103上实现一个双向链表的数据结构。双向链表是一种特殊的数据结构,它允许我们在列表中的节点之间进行前向和后向的移动,这在处理动态数据集合时非常有用。 首先,我们要...
链表是一种重要的数据结构,它在计算机科学中广泛应用于各种算法和程序设计中。快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出,它的基本思想是通过一趟排序将待排记录分隔成独立的两...
《MFC实现的链表程序解析》 在计算机科学领域,数据结构与算法是核心的基础,其中链表作为基础的数据结构之一,具有重要的理论和实践价值。本篇将深入探讨如何利用Microsoft Foundation Classes (MFC)框架来实现...
在计算机科学中,链表是一种常见的数据结构,用于存储一系列有序元素。在链表中,元素不是连续存储的,而是通过指针连接。本话题主要关注如何使用C语言实现一个功能,即“从尾到头”打印链表,这个过程可能会涉及到...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着不可或缺的角色,特别是在处理大量动态数据时。在本示例中,“链表演示(基于MFC)”是使用Microsoft Foundation Classes (MFC) 库来实现的一个链表的简单...
C 语言动态链表的建立 C 语言动态链表的建立是计算机编程中的一种常见技术,用于存储和管理大规模数据。动态链表是一种动态分配内存的数据结构,能够根据实际情况自动调整存储空间。下面是一个使用 C 语言编写的...
在本文中,我们将深入探讨如何使用Qt框架中的QGraphics模块来创建一个可视化的链表。Qt是一个跨平台的应用程序开发框架,广泛应用于图形用户界面(GUI)和非GUI应用程序的开发。QGraphics模块提供了一组高级图形视图...
C语言链表题目详解 本资源摘要信息将详细解释C语言链表题目中的知识点,涵盖链表的建立、功能实现、指针、函数、动态结构建立等方面的知识。 一、链表的概念 链表是一种数据结构,它由多个节点组成,每个节点都...
操作系统课程设计中实现线程安全的双向链表是一项重要的实践任务,这涉及到多线程编程、数据结构以及并发控制等核心知识点。在这个项目中,我们主要关注如何在多线程环境下构建一个能够正确操作(如插入、删除)而不...
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针或引用连接在一起,形成一个逻辑上的线性序列。单向链表的每个节点包含两部分...