简单链表
前几次课程是关于用数组实现队列,那么现在要掌握的就是用链表来实现队列了。
数组和队列是作为两种基本的简单数据结构,在编程过程中是经常用到的。就两者区别而言,数组趋向于连续,链表趋向于离散。而就我个人而言,链表是实际操作性要比数组强。但是,正如胡哥所说,比较数组和链表究竟哪个好哪个坏是没有意义的,一个事物的存在必然有他存在的道理和必要,重要的是在什么场合应该使用什么样的方式来解决问题。
链表,实际上就像一个又一个的珠子,用一条线将他们穿起来,连成一个整体,用这样的方式来是这些“珠子”联系到一起来。而链表中所实现的功能由程序员自己定义,比如添加,插入,删除等等,接下来就是一个简单的链表。
要实现一个链表,首先应该实现一个LinkNode的类,其中要定义基本属性和基本方法,以供后面的大功能使用:
public class LinkNode {
private Object obj=new Object();//节点内的数据对象
private LinkNode next;//定义下一个节点的引用
//在创建节点对象的时候就传入节点中的数据对象
public LinkNode(Object obj){
this.obj=obj;
}
public Object getObj(){
return obj;
}
public void setObj(Object obj){
this.obj=obj;
}
public LinkNode getNext(){
return next;
}
public void setNext(LinkNode next){
this.next=next;
}
}
在完成基本类的编写后,要完成功能方法的实现,在此,我将实现几种常见的简单的功能:
为了方便功能方法的实现,在主函数类LinkList中定义如下属性:
private static LinkNode root=null;
private static LinkNode last=null;
在主函数类LinkList中定义一下功能方法:
1. 添加功能:
// 定义一个添加功能(添加到最后一个后面)
public void add(Object obj){
LinkNode node=new LinkNode(obj);
if(null==root){
root=node;
last=root;
}else{
last.setNext(node);
last=node;
}
2.删除功能
//定义一个删除功能
public void remove(int index){
if(index==0){
root=this.getNode(index+1);
}else if(this.getNode(index)==null){
System.out.println("输入错误!");
}else{
this.getNode(index-1).setNext(this.getNode(index+1));
}
}
2.插入功能
//插入功能(在指定位置后面插入)
public void insert(Object obj,int index){
LinkNode node=new LinkNode(obj);
if(root==null){
root=node;
}else{
LinkNode node2 = this.getNode(index+1);
this.getNode(index).setNext(node);
node.setNext(node2);
}
}
3.查询功能
//定义一个查询指定位置对象的功能
public LinkNode getNode(int index){
LinkNode node=root;
int count=0;
while(count!=index){
node=node.getNext();
count++;
}
return node;
}
4.打印功能
//定义一个打印功能
public void print(LinkNode root){
LinkNode node=new LinkNode(null);
node=root;
while(node!=null){
System.out.println(node.getObj());
node=node.getNext();
}
}
5.确定长度功能
public int getLength(){
int length=0;
LinkNode node=root;
while(node!=null){
node=node.getNext();
length++;
}
return length;
}
}
主函数如下:
public static void main(String[] args) {
LinkList list=new LinkList();
list.add("添加成功了!");
list.add("再次添加成功了!");
list.remove(1);
list.insert("插入了!", 0);
System.out.println("该链表的长度是: "+list.getLength());
list.print(root);
}
得到结果如图:
这样就实现了一个简单的单向链表!
虽然上述代码比较简单,但是,这是学好更加深层次的东西的基础,所以,应该反复咀嚼,好好消化。
- 大小: 10.1 KB
分享到:
相关推荐
以上是对单向链表类模板的简单概述,实际实现可能更复杂,包括错误处理、优化等。这个模板类可以用于存储任何类型的数据,使得代码更具复用性和灵活性。在使用时,只需要传入所需的数据类型即可,如`LinkedList<int>...
这段源代码提供了一个简单的单向链表实现,包括插入、删除和打印链表的方法。你可以根据实际需求扩展其他功能,如查找节点、反转链表等。在培训班中,这样的代码示例有助于学员理解和掌握单向链表的工作原理及其在...
本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么是单向链表。单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,...
以下是一个简单的C#单向链表节点和链表类的自定义实现: ```csharp public class Node { public T Value { get; set; } public Node<T> Next { get; set; } public Node(T value) { Value = value; Next = ...
C++进阶学习——单向链表的实现,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/49685199
### C#实现单向链表 #### 一、引言 单向链表是一种常见的数据结构,在计算机科学中被广泛应用于解决各种问题。它由一系列节点组成,每个节点包含一个数据元素以及指向下一个节点的引用。本文将详细介绍如何在C#中...
本主题聚焦于使用C#语言通过泛型来实现一个单向链表。链表是一种非连续、非顺序存储的数据结构,由一系列节点(也称为元素或记录)组成,每个节点包含数据和指向下一个节点的引用。在C#中,泛型提供了一种方式,可以...
C语言指针实现单向链表 初学者看,非常简单。 时间非常多的功能不同位置的插入、删除、查找;
单向链表是一种简单的数据结构,由一系列节点组成,每个节点包含数据以及指向下一个节点的引用。在LinkedBlockingQueue中,每个节点不仅存储数据,还包含了指向下一个节点的引用,以及一个用于阻塞等待的锁对象。...
这是近期自己参考书上和网上资源使用C++编的单向链表,主要包含了链表的增删改查功能,除此之外还有简单的排序功能,代码实现的效果图已经在项目文件夹中了,可以按照效果图进行数据的增删改查等操作,最后也希望对...
在本文中,我们将深入探讨如何使用C++实现一个简单的单向链表。单向链表是一种数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。在这个实现中,我们创建了一个名为`Node`的结构体来表示链表中的...
这是一个关于单向链表的程序,创建了一个有序链表,插入节点,计算学生记录的平均值,最后删除整个链表
单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来,每个节点包含数据部分和指向下一个节点的指针部分。这种存储方式...
一个简单的单向链表节点定义如下: ```c typedef struct Node { int data; // 数据域,可以是任意类型,这里以整型为例 struct Node* next; // 指针域,指向下一个节点 } Node; ``` 创建链表的过程通常从创建头...
在这个名为"单向链表实现的叫号程序"的案例中,我们可以通过分析`CallNum.java`文件来理解如何利用单向链表来实现一个简单的财务叫号系统。 首先,单向链表不像数组那样有一个连续的内存空间,它的每个元素(节点)...
单向链表的优点是结构简单,节省存储空间,但缺点是操作不够灵活。 **双向链表** 在每个节点上除了包含数据外,还维护了两个指针,一个指向前一个节点,另一个指向后一个节点。这样,双向链表支持正向和反向遍历,...
单向链表是链表的一种类型,其中每个节点仅有一个指向下一个节点的指针,而没有指向前一个节点的指针。 **中间结点问题** 是链表操作中的一个重要话题,特别是在面试和算法设计中经常出现。给定一个单向链表,找到...
以下是一个简单的单向链表节点的C++源码实现: ```cpp struct Node { int data; Node* next; }; // 创建新节点 Node* createNode(int data) { Node* newNode = new Node(); newNode->data = data; newNode->...
链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。 如下图所示: 一个单向链表包含两个值: 当前节点的值和一个指向下一个...