自定义链表(一)——小试牛刀
我们除了上次我们讲到自定义队列,当然,我们同样可以自定义链表,不过我觉得自定义链表要比自定义队列更抽象,所以,当你顿悟到自定义列表的奥义时,内心的成就感好强烈的说,恨不得一下子吧他更多的方法都实现。在我最初与自定义链表交手的时候最容易犯的错误就是空指针。所以,大家一定要注意啊,链表可不是随随便便就能打倒的小怪兽啊~要加油哦;
在编写自定义链表的时候,我们不仅需要编写整个链表的实现代码,也要编写节点,节点很简单待会儿看代码大家就知道了:
首先是节点代码
文件:
这里我我同样使用了泛型以不同的数据结构
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自定义链表实例.rar`
数据结构 约瑟夫环的链表实现 可以用链表的方法实现对约瑟夫环的具体操作
自实现链表 还非得大于20字,那我就写点废话,把这个字数凑够,应该够了吧
数组和链表——精选推荐 数组和链表.pdf
数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表
单向动态链表的建立,及修改!
这是一个双向链表,非常的可以。主要有3个头文件,10多个实现文件,还有一个主函数文件,希望大家多多支持!
建立正序链表链表——正序建立
完成学生信息管理系统的设计与实现,数据存储使用自定义链表,实现赠、删、查、改的功能。执行界面如下: 系统界面: *********************学生基本信息管理系统********************* ****1、添加 2、查询 ****...
绝对自己编写,用链表实现多项式的加减,希望能对大家有帮助!
1.1 从尾到头打印链表内容——辅助栈 1.2 从尾到头打印链表内容——递归法 2.1 反转链表——普通循环反转 2.2 反转链表——头插法反转
java基础知识代码实现,包括冒泡算法,快速算法,九九乘法表,创建多线程的方式,自定义链表,递归使用方式,创建单例等,可解压代码直接运行测试学习!
编写一个数组,利用链式 不是顺序的 实现元素 排序 查找 插入等!
使用C语言实现的“泛型链表”,该链表为循环双链表,它的设计参考了C++的STL容器库中的容器list及泛型算法的接口,并使用迭代器来遍历链表。使用时只需要include头文件即可,隐藏了List类型的具体实现。用户并不需要...
是用数据结构和算法中链表的算法,来设计有界面的链表运用的实例。 是用数据结构和算法中链表的算法,来设计有界面的链表运用的实例。