先说点题外话:
不知道为什么,我们学校还有别的好多学校的软件院都不学C而直接学C++;
我们信息院就只学了C语言……
不过这也有好处……比如C里面的链表学的比较扎实
C有一个重要的东西叫做指针,用指针指来指去就出来链表了,我们上学期学到了单向链表,就是在每一个struct结构体里面只有一个用来指向下一个节点的指针,结构图如下(自己画的,意思到了……):
这是单向链表,给出了头指针就能找到整条链表。
双向链表就是在每一个节点再加上一个用来指向它前一个节点的指针,这样的好处就是不管给你链表中的任何节点,都能把整个链表找到。
环链表,就是把链表的头和尾相连,具体干什么用现在还不知道……
java里面没有指针这个东西,但是也可以实现链表(有现成的类,但是为了理解链表,还是自己山寨一个吧~以双向链表为例)
类似于C里面的struct结构体,那我们就创建一个节点类LinkNode,里面有三个对象: 一个是只向前一个节点的内容 body 上一个对象 father 下一个对象 son (名字是自己乱起的……)
/**
* 节点类
* @author Micro
*
*/
public class LinkNode {
//一个节点里面有什么东西
private Object body=null;
private LinkNode Father=null;
private LinkNode Son=null;
/**
* 重载构造器
* @param body
*/
public LinkNode(Object body){
this.body=body;
}
public Object getBody() {
return body;
}
public void setBody(Object body) {
this.body = body;
}
public LinkNode getFather() {
return Father;
}
public void setFather(LinkNode father) {
Father = father;
}
public LinkNode getSon() {
return Son;
}
public void setSon(LinkNode son) {
Son = son;
}
}
然后再创建一个链表类 里面写上一些关于这个链表的一些操作方法,比如创建链表,删除节点,添加节点,取得链表长度,遍历链表之类的。
下面一张图是插入操作的示意图(删除和插入差不多,逆过程)
1.先找到下表所对应的节点 Note(名字乱起的)
2.设置要插入的结点的父子指针
3.更改原来链表节点数据的父子子指针
这样插入操作就完成了~~~
下面就是部分山寨链表的代码~~
/**
* 链表
*
* @author Micro
*
*/
public class LinkList {
// 程序入口
public static void main(String[] args) {
LinkList link = new LinkList();
link.creat();
link.printList();
System.out.println("长度为:"+link.size());
}
// 先定义头尾指针
private static LinkNode head = null;
private LinkNode foot = null;
// 创建链表
public void creat() {
for (int i = 0; i < 10; i++) {
String str = "元素" + i;
LinkNode temp = new LinkNode(str);
if (head == null) {
head = temp;
foot = temp;
} else {
temp.setFather(foot);
foot.setSon(temp);
foot = temp;
}
}
}
// 取得链表长度
public int size() {
int n = 0;
LinkNode i;
for (i = head; i != null; i = i.getSon()) {
n++;
}
return n;
}
// 遍历链表
public void printList() {
for (LinkNode i = head; i != null; i = i.getSon()) {
System.out.println(i.getBody());
}
}
}
- 大小: 16.6 KB
- 大小: 35.3 KB
分享到:
相关推荐
《Java图解创意编程:从菜鸟到互联网大厂之路》这本书是一本面向初学者的编程书籍,旨在帮助读者从零基础开始学习Java编程,并逐步掌握互联网大厂常用的核心技术。本书以图解的方式进行讲解,通过大量的实例和图表,...
以上只是Java工具类的一小部分,实际上,Java API中还有许多其他工具类,如`UUID`用于生成全局唯一标识符,`Pattern`和`Matcher`用于正则表达式操作,`System`类提供了系统相关的属性和控制功能等。熟练掌握这些工具...
"JAVA数据算法及答案,菜鸟级的!"这个资源可能是为这样的学生准备的,旨在帮助他们在短短两小时内快速掌握基础的Java数据处理技巧。 首先,我们来讨论一些基本的数据结构,它们在Java中被广泛使用: 1. 数组...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是简洁、通用,并且能够适应互联网环境。本教程非常适合初学者,旨在帮助你从零开始掌握Java编程...
10. 双向链表:与单链表不同,双向链表的每个节点都有两个指针,分别指向前一个和后一个节点,Java的LinkedList类同样支持双向链表操作。 本教程的高清PDF格式将为学习者提供清晰的视觉体验,易于阅读和学习。面向...
* 集合框架是 Java 中的一种数据结构,用于存储和操作对象的集合。 * 集合框架的顶层接口是 Collection 接口,继承自该接口的有 List、Set 和 Map 等接口。 二、List 接口 * List 接口是 Collection 接口的一个子...
### 菜鸟虚怀项目笔试题解析 #### 题目一:合并有序链表 **题目背景:** 此题考察的是数据结构中的链表操作。题目要求将两个已经排序(升序)的单链表合并为一个新的有序链表。 **题目分析:** 根据给定的代码...
LinkedList 的存储性能和特性:ArrayList 和 Vector 都是使用数组方式存储数据,Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,插入数据时只...
Java学习进阶是一个系统的过程,涉及多个层面的知识和技能。以下是一个详细的指南,帮助你从初学者逐步成长为Java开发的大神。 1. **编程基础** - **数据结构与算法**:这是所有程序员的基石。熟悉数组、链表、...
5. **数据结构与算法**:在Java编程中,熟练掌握数据结构(如数组、链表、树、图等)和算法对于高效处理大数据至关重要。练习题可能涵盖排序、查找、图遍历等常见问题。 6. **集合框架**:Java集合框架包括接口(如...
2. **链表(Linked List)**:链表非顺序存储,每个元素(节点)包含数据和指向下一个节点的引用。Java中的LinkedList类实现了List接口,提供了插入、删除和遍历操作。 3. **栈(Stack)**:栈是一种后进先出(LIFO...
在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)的世界里,新手往往面临着许多挑战。"菜鸟ACM学习笔记"是一个宝贵的资源,旨在帮助初学者逐步掌握这个领域的核心知识。下面,我们将...
Java面试宝典-2013版.doc 这篇文档可能是2013年整理的一份Java面试必备资料,涵盖...总的来说,这份"Java面试宝典"将帮助求职者准备全面的Java技术面试,同时也能促使他们在学习过程中不断提升自己的技术深度和广度。
数据结构是计算机科学中的一个核心概念,它涉及到组织、管理和存储数据的方式,以便可以高效地访问和修改数据。不同的数据结构适合不同的应用场景。以下是一些常见的数据结构以及相关的教程和代码资源: 1. **数组...
本资源是一份针对初学者的Java学习总结,通过实例程序逐步讲解,帮助菜鸟级学习者理解Java的基本概念和常用技术。 1. **Java基础** - **数据类型**:Java分为原始数据类型(如整型、浮点型、字符型和布尔型)和...
在本项目"基于Java实现的Snake.zip"中,开发者利用Java编程语言重新实现了经典游戏——贪吃蛇。这个游戏是许多初级程序员学习编程时喜欢尝试的一个练习,因为它涉及到基础的编程概念,如循环、条件判断、对象和事件...
作为一名Java编程的新手,面临各种技术挑战是常态。在编程的道路上,我们都是从零开始,逐步积累经验,从菜鸟成长为大神。阿里巴巴作为全球知名的科技公司,其笔试题往往涵盖了广泛的IT知识,旨在考察候选人的基础...
首先,Java是一种广泛使用的面向对象的编程语言,其特点包括平台无关性、内存自动管理(垃圾回收)、丰富的类库以及强大的多线程支持。面试中可能会涉及Java语法、异常处理、集合框架、IO流、反射机制、JVM内存模型...
在Java面试中,掌握基础和核心概念是非常重要的。以下是一些关键知识点的详细解释: 1. **面向对象的特征** ...以上内容涵盖了Java面试中常见的核心概念,对于准备面试的开发者来说,理解和掌握这些知识点至关重要。