- 浏览: 3560999 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
今天用java写了下的链表, 还是有点糊涂的。这和C语言写的链表还是有点不太一样的。感觉C语言的结构清晰点的,可能是内存中保存的值是引用还是真的值有关系吧有两点要说明下的:
1、Head --> Node --> Node --> Node --> Node
链表的head是不保存数据的,一般开辟内存然后在里面放null空对象。保存值从第一个Node开始的。C语言好像也是这样的吧
2. 下面的程序我到是测试了下,平时过过面试笔试的关是没有问题了。但是有的地方还是需要再分析下的。
实现了增加删除显示
下面是步骤
创建People类,这个就相当于我们放入到链表中的数据
package endual; public class People { private int id ; private String name ; private int age ; public People(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
步骤二:创建Node节点
package endual; public class Node { private People people = new People(0,"head",0); private Node nextNode ; public Node(People people,Node nextNode) { super(); this.people = people ; this.nextNode = nextNode ; } //显示该节点的数据 public void display() { System.out.println(people.getId() +"--" + people.getName() +"--" + people.getAge()) ; } public People getPeople() { return people; } public void setPeople(People people) { this.people = people; } public Node getNextNode() { return nextNode; } public void setNextNode(Node nextNode) { this.nextNode = nextNode; } }
需要说明的是一个节点,中是保护一个数值和下一个节点
步骤三:
链表的实现
package endual; /** * 最重要的说明,head节点是不保存people数据的只是一个头节点,保存数据是从head的下一个节点开始的 * @author Endual * */ public class LinkList { //链表的头节点是很重要的,寻找到头节点就能做删除插入等操作了 private Node head ; private int nItems = 0 ; //链表的数据个数有多少个,初始化是0 public LinkList() { this.head = new Node(null,null) ; //这里必须开辟对象,将head指向一个对象 } //判断是否为空 public boolean isEmply() { if(this.nItems==0) { return true ; } return false ; } // * 链表的长度 public int size() { return this.nItems ; } //插入一个node到链表的尾部 public void insertTail(People people) { //传递进来的就是新的node // Head(头节点的数据是没有的) --> Node(保存数据从这里开始) --> Node --> Node --> FirstNode // 相当于Node node = new Node(new People) ; Node node = new Node(people,null) ; //创建一个新的Node的链表节点,其中数据是传入进来的people,下一个节点是null Node temp = head ; //创建了一个中间变量,中间变量的变化就是head的变化 while (null != temp.getNextNode()) { temp = temp.getNextNode() ; } temp.setNextNode(node) ; //一般而言是从第二个节点才开始放数据的,所以头节点是的node是NULL this.nItems++ ; } //插入一个node到一个链表的头部 public void insertHead(People people) { //将新插入的node节点作为第一个显示的节点 Node node = new Node(people,null) ; //将要被插入的节点 node.setNextNode(head.getNextNode()) ; //插入节点的下一个节点是head指向的下一个节点 head.setNextNode(node) ; //head指向的下一个节点改变成为node this.nItems++ ; //插入数据将存放的个数加1; } //根据标号来插入数据 从0开始 public void insert(int index, People people) { //判断插入的数据是否合法 if(index < 0 || index > this.nItems) { System.out.println("插入的index错误") ; return ; } Node node = new Node(people,null) ; //将要被插入的节点 Node temp = head ; for (int i=0; i < index; i++) { temp = temp.getNextNode() ; //这个就是第index个节点的前一个节点,查在这个位子,这个位子要向 } node.setNextNode(temp.getNextNode()) ; temp.setNextNode(node) ; this.nItems++ ; } //根据位子来查找数据 public People find(int index) { if (index < 0 ) { System.out.println("查找的index位子不能小于0"); return null; } if (index+1 > this.nItems) { System.out.println("查找的位子大于链表的长度了"); return null; } Node temp = head ; for (int i=0; i <= index; i++) { temp = temp.getNextNode() ; } return temp.getPeople(); } //根据位子删除 public void delete(int index) { if (index<0 || index > this.nItems) { System.out.println("index数据或大或小"); return ; } /** * 说明 * index = 0 , 删掉第一个,找到head * index = 1 , 删掉第二个,找到第一个 * index = 2 , 删掉第三个,找到第二个 */ Node temp = head ; for (int i=0; i < index; i++) { temp = temp.getNextNode() ; } temp.setNextNode(temp.getNextNode().getNextNode()) ; this.nItems-- ; } //删除结尾 public void delectTail() { if(this.nItems==0) { System.out.println("当前链表为空") ; return ; } Node temp = head ; for (int i=0; i < this.nItems-1; i++) { temp = temp.getNextNode() ; } temp.setNextNode(null) ; this.nItems-- ; } //删除头 public void deleteHead(){ if(this.nItems==0) { System.out.println("当前链表为空") ; return ; } Node temp = head ; head.setNextNode(temp.getNextNode().getNextNode()) ; this.nItems-- ; } /** * 显示链表 */ public void display() { Node current = head ; if (this.nItems == 0) { System.out.println("当前链表为空") ; return ; } //while中用node节点的下一个节点是否为空 while (current.getNextNode() != null) { //在while中如果第一次是null那么说明是这个链表还没有数据 current = current.getNextNode() ; //将当前节点移动到下一个节点 current.display() ; //显示当前节点 } } }
步骤四 :测试类的实现
package endual; public class Mian { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub People p1 = new People(1, "n1", 1) ; People p2 = new People(2, "n2", 2) ; People p3 = new People(3, "n3", 3) ; People p4 = new People(4, "n4", 4) ; People p5 = new People(5, "n5", 5) ; People p6 = new People(6, "n6", 6) ; People p7 = new People(7, "n7", 7) ; LinkList lk = new LinkList() ; lk.display() ; lk.insertTail(p1) ; lk.insertTail(p2) ; lk.insertTail(p3) ; lk.insertTail(p4) ; lk.insertTail(p5) ; lk.insertTail(p6) ; lk.insertTail(p7) ; lk.display() ; // System.out.println(lk.find(0).getId()) ; // System.out.println(lk.find(1).getId()) ; // System.out.println(lk.find(2).getId()) ; // System.out.println(lk.find(3).getId()) ; // System.out.println(lk.find(4).getId()) ; // System.out.println(lk.find(5).getId()) ; // System.out.println(lk.find(6).getId()) ; // System.out.println(lk.find(7).getId()) ; lk.delete(0) ;lk.delete(3) ; lk.display() ; } }
需要说明的是 测试类可以自己写 。
希望对面试啊 笔试啊 有好处吧。
我非常愿意与你交流关于面试笔试已经学习基础的数据结构和算法的问题。因为本人现在在复习这个。
我的QQ:1019990976 麻烦注明:数据结构
发表评论
-
java 归并排序 自己写
2012-02-22 09:03 1460package endual.xier.writeaga ... -
递归思想 汉诺塔的问题
2012-02-09 10:46 1662package endual; public cl ... -
带权图 最短路径 代码自己写
2012-02-09 10:46 3188最短路径问题 可 ... -
带权图的最小生成树 (代码自己写)
2012-02-08 16:02 46621.大理论的一些资料 ... -
数据结构学习的在线好网址
2012-02-07 16:20 1568http://sjjg.js.zwu.edu.cn/SFXX/ ... -
有向无环图 拓扑排序
2012-02-07 15:53 3466package endual.tuopupaixu; ... -
java 图的最小生成树问题 (代码自己写)
2012-02-07 13:51 2795最小生成树是基于无无向图,并且是没有权值的图的。它的实现可以用 ... -
java 图 代码自己写
2012-02-07 13:07 1791图的建立也是基于数组的,但是遍历的话是基于链表或者是矩阵的 ... -
堆 (自己写)
2012-02-06 13:32 1465堆也是基于数组的哦,所以在创建的时候,请先要考虑好数组的大小了 ... -
哈希表的一些概念 代码(自己写)
2012-02-05 18:44 2187首先,我们要明确一点 ... -
红黑树的一些概念
2012-02-05 14:43 2016普通的二叉树作为数 ... -
两个正整数相加
2012-02-05 09:48 1876import java.util.Scanner; i ... -
二叉树代码
2012-02-05 09:51 1729package endual; /** * 树 ... -
java 二叉树
2012-02-04 14:17 1579为什么要用二叉树 通常我们去实现数据结构有两种方式,一 ... -
桶排序(代码自己写)
2012-02-04 13:24 2039简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶 ... -
各类排序算法
2012-02-04 13:19 1486隐藏▲ 查 · 论 -
快速排序算法(自己写)
2012-02-04 12:58 1770快速排序算法的伪代码。 package endual; ... -
java 希尔排序算法(自己写)
2012-02-04 10:26 1875希尔排序算法是对插入算法的应用吧,就是多次的使用了插入算法多排 ... -
递归 字符串的全排列
2012-02-03 15:29 2462package endual; public class ... -
java递归的一个问题
2012-02-03 13:56 1871据说比达格斯理论家,又称一群在必达格斯领导下工作的古希腊数学家 ...
相关推荐
用java实现了数据结构中的链表,作为新手学习数据结构和java的资料。
JAVA实现链表_双向链表
用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
接下来,我们需要编写一个方法来实现链表的倒序。该方法接收链表的头结点作为参数,并返回倒序后的新的头结点。实现的逻辑大致分为以下几个步骤: 1. 初始化三个指针:`p`、`q`和`head`。 2. 使用循环逐个反转节点的...
以下是使用迭代方式实现双向链表反转的Java代码: ```java public void reverse() { if (head == null || head.next == null) { return; } Node current = head; Node previous = null; while (current != ...
虽然Java没有像C或C++那样的指针,但是通过对象引用,我们完全可以在Java中实现链表数据结构。这种实现方式不仅安全,而且易于理解和操作。通过链表,我们可以高效地处理动态数据集,执行插入、删除等操作,而无需...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
Java 实现链表 在计算机科学中,链表是一种常用的数据结构,它允许在内存中存储和管理大量的数据。Java 语言提供了多种方式来实现链表,本文将详细介绍 Java 实现链表的方法和技巧。 链表的定义 链表是一种非线性...
2. **链表类**:实现链表的基本操作,如添加节点、删除节点、遍历链表等。 3. **解析器**:将输入的数学表达式转换为链表结构。这可能涉及到字符串分割、运算符优先级判断等步骤。 4. **计算器引擎**:遍历链表并...
用Java定义一个循环链表,实现链表的基本操作: 初始化*、获取头结点、添加新元素*、删除链表元素 、获取链表元素*、查找链表元素*、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空...
数据结构,用Java实现链表 private class Node { private String data; private Node next; public Node(String dataPortioin) { data = dataPortioin; next = null; } public Node(String ...
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
用java实现链表增删改查
本篇将深入探讨如何用链表来实现线性表,并通过提供的`ChainList.java`和`ListInterface.java`文件来理解其实现细节。 首先,线性表具有顺序访问的特点,其元素可以通过索引进行访问。链表是一种非连续存储结构,每...
标题“试析用Java实现链表数据结构.pdf”所揭示的知识点涵盖了Java编程语言在内存管理和链表数据结构实现方面的深入探讨。描述中提到的“#资源达人分享计划#”可能意味着这篇文章是作为知识分享的一部分,而标签...
实现链表定时器的关键步骤如下: 1. **定义节点类**:创建一个`TimerNode`类,包含两个属性:`task`(代表任务对象)和`time`(代表任务的执行时间)。 2. **初始化链表**:创建一个空链表,头节点为null。 3. **...
JAVA链表实现类(数据结构学习).chm