我们经常实用c++来建立链表,为了学习的方便,此处我使用java实现了对链表的增删改查功能

整个过程较为简单。仅供参考

流程:

(1)通过内部类Node建立结点,内部变量作为指针域和数据域,并写下构造函数

(2)通过建立对象初始化头结点,也可直接在main函数中建立头结点,创建带有N个结点的链表

(3)建立链表的函数为public void create(int n),带有n个结点

(4)删除结点函数 public void delete(int i)

(5)插入结点函数 public void insert(int i,int m)

(6)寻找结点函数有两类,一个是通过位置寻找,一个是通过数值寻找

(7)最后是打印链表内容

 package Main;

 import java.util.Scanner;

 /*链表操作*/
public class Main{
public static Node head; //建立头结点
class Node{ //内部类Node用于建立结点
public int data; //数据域
public Node next; //指针域
public Node()
{
super();
}
public Node(int data) //初始化数据域
{
this.data = data;
}
}
public Main() //通过建立对象初始化头结点,也可直接在main函数中建立头结点
{
head = new Node();
}
public Main(int n)
{
this();
create(n); //创建带有N个结点的链表
}
//建立链表
public void create(int n)
{
Node init = new Node();
init = head; //新建一个结点指向头结点
Scanner aScanner = new Scanner(System.in);
int data;
while(n!=0)
{
data = aScanner.nextInt();
Node pNode = new Node(data);
init.next = pNode; //将当前结点指向新建的结点
init = init.next; //结点右移
n--;
}
}
//删除结点
public void delete(int i)
{
Node pNode = new Node();
pNode = head;
i--;
while(pNode.next!=null&&i!=0) //遍历找到结点i
{
pNode = pNode.next;
i--;
}
pNode.next = pNode.next.next; //直接将该节点跨过
}
//插入结点
public void insert(int i,int m)
{
Node pNode = new Node();
pNode = head;
i--;
while(pNode.next!=null&&i!=0)
{
pNode = pNode.next;
i--;
}
Node aNode = new Node(m);
aNode.next = pNode.next;
pNode.next = aNode;
}
/*寻找结点*/
//按位置寻找
public int find(int m)
{
Node pNode = new Node();
pNode = head;
while(pNode.next!=null&&m!=0)
{
pNode = pNode.next;
m--;
}
return pNode.data;
}
//按值寻找
public int indexof(int k)
{
Node pNode = new Node();
pNode = head;
int location=0;
while(pNode.next!=null)
{
pNode = pNode.next;
location++;
if(pNode.data==k) //判断,若是则返回位置,否则返回-1
return location;
}
return -1;
}
public void print() //打印链表
{
Node print = new Node();
print = head;
while(print.next!=null)
{
print = print.next;
System.out.print(print.data+" ");
}
System.out.println();
}
public static void main(String[] args) {
Main aMain = new Main(5); // 建立一个带有5结点的链表
aMain.insert(4, 100); //在位置4处插入数字100
int findresult_1 = aMain.find(2); //寻找位置2处的数据
int findresult_2 = aMain.indexof(35); //寻找数据35所处的结点位置
aMain.print();
System.out.println("第2个结点的数据查询为:"+findresult_1);
if(findresult_2==-1)
{
System.out.println("未检测到要查询的数据");
}else {
System.out.println("数据35的查询位置为:"+findresult_2);
}
System.out.println("删除后的链表为:");
aMain.delete(5); //删除位置5处的结点
aMain.print();
}
}

算法,可直接插入其中,修改main即可!!

 public void algorithm(int m)
{
Node pNode = new Node();
pNode = head;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
pNode = pNode.next;
while(pNode.data==0)
{
pNode = pNode.next;
}
}
System.out.println(pNode.data);
pNode.data=0;
}
}

数据结构1_java---单链表的操作,约瑟夫问题的更多相关文章

  1. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  2. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  3. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  4. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  5. Java数据结构之单链表

    这篇文章主要讲解了通过java实现单链表的操作,一般我们开始学习链表的时候,都是使用C语言,C语言中我们可以通过结构体来定义节点,但是在Java中,我们没有结构体,我们使用的是通过类来定义我们所需要的 ...

  6. Java数据结构-02单链表(一)

    一.链式存储: ①简述:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的.存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个 ...

  7. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

  8. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  9. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  10. 数据结构 - 动态单链表的实行(C语言)

    动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...

随机推荐

  1. 新版本SpringCloud sleuth整合zipkin

    SpringCloud Sleuth 简介 Spring Cloud Sleuth为Spring Cloud实现了分布式跟踪解决方案. Spring Cloud Sleuth借鉴了Dapper的术语. ...

  2. centos 搭建SVN服务器简单流程

    yum -y install subversion mkdir -p /work/svn && cd /work/svn //创建版本库 svnadmin create test -- ...

  3. 关于svn更新失败,clearup异常解决

    直接上主题: 1. 下载sqlite3工具(https://files.cnblogs.com/files/eric-fang/sqlite-tools-win32-x86-3210000.zip), ...

  4. 第六届蓝桥杯java b组第一题

    第一题 三角形面积 图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. 填空答案 28 没什么好说的 第一题很水 估计就是为了增 ...

  5. Spring boot 官网学习笔记 - Using Spring Boot without the Parent POM,但是还要使用Parent POM提供的便利

    If you do not want to use the spring-boot-starter-parent, you can still keep the benefit of the depe ...

  6. Build step 'Invoke top-level Maven targets' marked build as failure Finished解决

    最近用法 jenkins部署maven项目时候,突然出现Build step 'Invoke top-level Maven targets' marked build as failure Fini ...

  7. ┱Python中关于urllib和urllib2的问题

    python3对urllib和urllib2进行了重构主要拆分成了:1.urllib.request 1.urllib.request.Request(url, data=None, headers= ...

  8. 事件--JavaScript

    事件概述 JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为. 简单理解: 触发--- 响应机制. 网页中的每个元素都可以产生某些可以触发 JavaSc ...

  9. .Net Core 微服务容器系列基础目录篇

    1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...

  10. 你的环境有问题吧?--byte数组转字符串的疑惑

    1. 故事背景 小T是个测试MM,小C是个程序猿,今天早上他们又为一个bug吵架了. 小T:“这个显示是bug,在我的浏览器上显示不正确” 小C:“这个bug我不认,在我的电脑上显示正常,是你的环境有 ...