数据结构1_java---单链表的操作,约瑟夫问题
我们经常实用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---单链表的操作,约瑟夫问题的更多相关文章
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- Python数据结构之单链表
Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
- javascript数据结构之单链表
下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...
- 数据结构之单链表的实现-java
一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...
- Java数据结构之单链表
这篇文章主要讲解了通过java实现单链表的操作,一般我们开始学习链表的时候,都是使用C语言,C语言中我们可以通过结构体来定义节点,但是在Java中,我们没有结构体,我们使用的是通过类来定义我们所需要的 ...
- Java数据结构-02单链表(一)
一.链式存储: ①简述:线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的.存储单元由两部分组成,数据源和指针,数据源放数据,指针指向下个 ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- 数据结构(一) 单链表的实现-JAVA
数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...
- 数据结构 - 静态单链表的实行(C语言)
静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...
- 数据结构 - 动态单链表的实行(C语言)
动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...
随机推荐
- Linux之文件与目录管理
加油!
- PyCharm2019激活
PyCharm下载地址:https://www.jetbrains.com/pycharm/download/ 永久激活 这里主要介绍永久激活的方式,永久激活后,就可以放心使用了,一劳永逸,5分钟就能 ...
- python excel to mysql
import sys import xlrd import pymysql import math import json from collections import OrderedDict # ...
- 浅谈@RestController和@Controller的区别
在做Spring MVC开发时,如果对@RestController或者@Controller这两个注解理解不够清晰的话,就难免会出现用混的情况.而混用的结果往往是无法实现期望的跳转结果或者是直接将跳 ...
- 【linux】【mysql】mysql主从数据库
系统环境:Centos7 主:192.168.8.162 从:192.168.8.127 前提条件 a.关闭防火墙 systemctl stop firewalld 关闭防火墙开机自启 system ...
- mysql创建表时字段类型选择与优化
一.选择原则 1.应该尽量使用可以正确存储数据的最小字段类型 2.选用简单的数据类型,例如:一个是尽量用mysql内置的字段类型来存储日期和时间:另一个存储IP地址尽量用整型:能用整型的尽量不用字符串 ...
- jenkins自动化部署项目5 -- 系统管理-系统设置ssh配置
[系统管理]-[系统设置] 如果应用服务(前端后台)要部署在linux服务器上,我选择的是用ssh 为了jenkins登录远程登录linux服务器可以免密登录,先配置公钥和私钥: 我是在windows ...
- 2019年9月末周java面试总结
不知不觉离职已经2个月了,这周开始投简历找工作,本来也做好了被打击的心理准备了,毕竟这么久没敲代码,也没怎么准备,基本上是属于裸面. 总结一下简历投递情况: 不知道是简历写得太敷衍,还是要求太高,总之 ...
- meta标签设置(移动端)
一.首先出结论:移动端meta标签一般设置为: <meta content="width=device-width,initial-scale=1.0,maxinmum-scale=1 ...
- 微信小程序开发简述
微信小程序简述 什么是微信小程序? 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用.全面开放 ...