自定义链表(一)——小试牛刀
我们除了上次我们讲到自定义队列,当然,我们同样可以自定义链表,不过我觉得自定义链表要比自定义队列更抽象,所以,当你顿悟到自定义列表的奥义时,内心的成就感好强烈的说,恨不得一下子吧他更多的方法都实现。在我最初与自定义链表交手的时候最容易犯的错误就是空指针。所以,大家一定要注意啊,链表可不是随随便便就能打倒的小怪兽啊~要加油哦;
在编写自定义链表的时候,我们不仅需要编写整个链表的实现代码,也要编写节点,节点很简单待会儿看代码大家就知道了:
首先是节点代码
文件:
这里我我同样使用了泛型以不同的数据结构
package linePackage;
public class LinkNoke<E> {
private E e;//我们想存的数据就放在这里面
private LinkNoke next;//连接下一个数据(存放下一个数据的地址)
public LinkNoke(){
}
public LinkNoke(E e){
this.e = e;
}
public Object getObject(){
return e;
}
public void setObject(E e){
this.e = e;
}
public LinkNoke getNext(){
return next;
}
public void setNext(LinkNoke next){
this.next = next;
}
}
链表:
文件:
package linePackage;
publicclass LinkQuaue<E> {
private LinkNoke root;
private LinkNoke last;
//注意:root和last是自定义链表必须有的两个属性;否则会导致错误,有些同学把只last定义在last内,结果永远只有一个节点……
publicvoid add(E e){
LinkNoke<E> next = new LinkNoke(e);
//如果链表为空
if(root==null){//注意:如果对象为空,他的方法和属性都无法被调用,否则就会报空指针异常,所以一定要注意,在使用他之前一定要保证他被系统分配了内存空间可以以LinkNoke<E> next = new LinkNoke(e);这种方式,或者以root = new LinkNoke();的方式都可以
//root = new LinkNoke();
root = next;
last = root;
//如果添加的元素第一个元素:收尾相同;
}else{//如果链表不为空
last.setNext(next);
//last.setObject(e);
last = next;
}
}
//获取某个节点
public Object getLinkNoke(int index){
int count=0;
LinkNoke<E> next = new LinkNoke();
next = root;
while(count!=index){
next = next.getNext();
count++;
}
return next.getObject();
}
//删除要分三种情况:删第一个,删中间,删最后一个
publicvoid deletLinkNoke(int index){
int count=0;
LinkNoke<E> next = new LinkNoke();
LinkNoke<E> before = new LinkNoke();
if(index==0){//如果删的是第一个
root = root.getNext();
}
else{//否则——
next = root;
while(count!=index-1){
next = next.getNext();
count++;
}if(this.getLength()>index)/*如果删的不是最后一个*/{
before=next;
while(count!=index+1){
next = next.getNext();
count++;
}
before.setNext(next);
}else{//否则直接让倒数第二个接null
next.setNext(null);
last = next;
}
}
} //
publicint getLength(){
int count =0;
LinkNoke<E> next = new LinkNoke();
next = root;
while(next.getNext()!=null){
next = next.getNext();//一开始少了这个……死循环
count++;
}
return count;
}
}
//之后我会将这段代码的其他方法补上,大家耐心等等哈~
相关推荐
实现了一个自定义的数据结构 —— 树,该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于...
C语言链表操作——空间申请释放无漏洞,程序很完美的
在编程领域,自定义链表是一种常见的数据结构,它允许程序员根据特定需求设计和实现自己的链式存储结构。本文将详细讲解如何在Delphi环境中创建一个自定义链表实例,以及其背后的原理和操作。 首先,理解链表的基本...
在这个问题中,我们可以使用循环链表,因为约瑟夫环的最后一个元素会连接到第一个元素形成一个封闭的环。 约瑟夫环问题的链表实现通常分为以下步骤: 1. **初始化链表**:首先创建一个循环链表,链表的节点代表...
自定义链表 已经编译成功! 绝对可用~
本实例将深入探讨如何在Delphi中实现自定义链表,这是一种重要的数据结构,用于存储和操作动态集合。 链表不同于数组,它不连续存储元素,而是通过节点之间的指针链接彼此。每个节点包含两部分:数据和指向下一个...
在 Java 中,实现一个自定义的链表(如单链表或双链表)是一个非常好的练习。下面是一个单链表的完 整实现,包括基本的操作如插入、删除、查找和遍历。
在"链表——学生管理系统 MFC"项目中,链表被用来存储和管理学生信息。与数组不同,链表中的元素不连续存储,而是通过指针相互链接。每个链表节点包含两个部分:数据(在此案例中是学生信息)和指向下一个节点的指针...
链表是一种常见的数据结构,在计算机科学中被广泛用于存储和管理数据。与数组不同,链表中的元素不是连续存储在内存中的,而是通过指针连接在一起。本篇将深入探讨单向动态链表的建立、修改及其核心操作,旨在帮助...
**链表**是一种常用的数据结构,其特点是每个元素包含一个指向下一个元素的指针,这种结构非常适合处理动态变化的数据集合,例如在多项式加减运算中表示多项式。 **多项式**是数学中的一种表达式,由常数、变量和...
2. 双链表:每个节点包含两个指针,一个指向前一个节点,另一个指向后一个节点。双链表提供了双向遍历的能力,同时也使得在链表中间插入和删除节点变得更加方便。 3. 循环链表:链表的最后一个节点的指针指向头节点...
"指针链表——数据的插入与删除" 在计算机科学中,链表是一种基本的数据结构,它以节点的形式存储数据,每个节点都包含一个指向下一个节点的指针。指针链表是一种特殊的链表,它使用指针来连接各个节点,实现数据的...
同时,为了将链表与界面紧密结合,可能还需要自定义控件,如列表视图控件,动态更新显示链表中的内容。这需要覆盖控件的重绘方法,或者利用MFC的消息映射机制来更新视图。 通过上述步骤,我们已经构建了一个基本的...
在本项目中,"C语言链表课程设计——仓库管理系统.rar"是一个基于C语言实现的仓库管理系统的源代码压缩包。这个系统利用了链表数据结构来存储和管理仓库中的物品信息,包括入库、出库、查询等操作。链表是计算机科学...
这是一个双向链表,非常的可以。主要有3个头文件,10多个实现文件,还有一个主函数文件,希望大家多多支持!
完成学生信息管理系统的设计与实现,数据存储使用自定义链表,实现赠、删、查、改的功能。执行界面如下: 系统界面: *********************学生基本信息管理系统********************* ****1、添加 2、查询 ****...
双向链表(双链表)是链表的一种,和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。双向链表的特点是: * 节点的链接方向是双向的 * 相对于单链表来说,双向...
在IT领域,数据结构是计算机科学的基础,而链表作为一种重要的数据结构,有着广泛的应用。本文将深入探讨双向链表的实现以及它在一项特殊应用中的体现:一元多项式的加法与乘法运算。 首先,我们要理解双向链表的...
数据结构课程设计中,主题是实现一个基于数组链表的数据结构来统计文本中特定单词的出现次数和位置。这个程序被称为“文学研究助手”,旨在帮助研究人员统计英文小说中指定单词的频率及其在文中的位置。以下是对这个...
在C语言中,合并链表是一项基础且重要的数据结构操作。这个"CreateMergeList"程序很可能是用于解决将两个已排序的链表合并为一个有序链表的问题。在这个任务中,我们通常会创建一个新的链表,然后遍历两个输入链表,...