大话数据结构 java源代码_大话数据结构(八)Java程序——双向链表的实现
packagecom.aclie.dataStructe4.sqeList;public classMyDoubleLinkList {private int length =0;//当前长度
private Node head;//头结点
private Node tail;//当前结点结点
publicMyDoubleLinkList(){
initLink();
}public voidinitLink(){
head= new Node(null);
tail= new Node(null);this.head =tail;
length++;
}//获取链表长度
public intgetSize(){returnlength;
}//判断链表是否为空
public booleangetEmpty(){return getSize()==0;
}//根据索引查找元素 从第一个有效值开始
public Node getNode(intindex){
Node p;if(index < 0 || index >length ){
System.out.println("参数错误");
}if(index < this.length/2){
p= this.head;for(int i=0; i
p=p.next;
}
}else{
p= this.tail;for(int i= length; i>index;i--){
p=p.prev;
}
}returnp;
}public Object getData(intindex){returngetNode(index).data;
}//在头结点处插入
public booleanaddHead(Object e){//前驱引用为null,后继为node
Node node = new Node(e, null, this.head);//改变头结点的前驱后继
this.head.prev =node;this.head =node;if(tail == null){
tail= this.head;
}
length++;return true;
}//在尾结点插入
public booleanaddTail(Object e){if(this.head == null){this.head = new Node(e,null,null);this.tail = this.head;
}else{
Node node= new Node(e,this.tail,null);this.tail.next =node;this.tail =node;
}
length++;return true;
}//在指定位置插入元素
public boolean addData(intindex,Object ele){if(index <0 || index > this.length){
System.out.println("参数错误");
}if(this.head == null){this.addTail(ele);//用尾插法
}else{if(index == 0){
addHead(ele);//用头插法
}else{
Node p= this.getNode(index);//要插入处的结点
Node n =p.next;
Node node= new Node(ele,p,n);//要插入的结点
n.prev =node;
p.next=node;
length++;
}
}return true;
}public void removeData(intindex){if(index < 0 || index >length){
System.out.println("参数错误");
}else{
Node del= null;if(index == 0){
del= this.head;this.head = this.head.next;this.head.prev = null;
length--;
}else if(index == (length-1)){
Node p= this.getNode(index-1);//得到要删除结点的前驱结点
del = p.next;//要删除的结点
p.next =del.next;if(del.next != null){
del.next.prev=p;
}
del.next= null;
del.prev= null;
length--;this.tail.next = null;this.tail.prev =p;this.tail =p;
}else{
Node p= this.getNode(index-1);//要删除结点的前驱结点
del = p.next;//要删除的结点
p.next =del.next;if(del.next != null){
del.next.prev=p;
}
del.prev= null;
del.next= null;
length--;
}
}
}//打印所有链表中的元素
public voidprint(){
Node current= this.head;while(current != null){
System.out.println(current.data);
current=current.next;
}
}//反向打印链表
public voidreversePrint(){
Node current= this.tail;while(current != null){
System.out.println(current.data);
current=current.prev;
}
}public static voidmain(String args[]){
MyDoubleLinkList linkList= newMyDoubleLinkList();
linkList.addHead("aaaa");//System.out.println(linkList.getData(1));
linkList.addTail("bbbb");//System.out.println(linkList.getData(3));
linkList.addData(2, "eeee");//linkList.print();
linkList.removeData(2);
linkList.print();
System.out.println(".....");
linkList.reversePrint();
}
}classNode{
Node prev;//指针域中前驱
Node next;//指针域中后继
Object data;//数据域
publicNode(Node current){
prev=current;
next=current;
}//双链表前驱后继及数字域
publicNode(Object d, Node p,Node n){this.data =d;this.prev =p;this.next =n;
}publicNode getPrev() {returnprev;
}public voidsetPrev(Node prev) {this.prev =prev;
}publicNode getNext() {returnnext;
}public voidsetNext(Node next) {this.next =next;
}
}
大话数据结构 java源代码_大话数据结构(八)Java程序——双向链表的实现相关推荐
- 解析java源代码_一步步解析java执行内幕
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...
- the art of java 源代码_请不要再说Java中final方法比非final性能更好了
无继承 有 static 修饰 static final static 非 final 结果 这里使用了 OpenJDK 的 JMH 基准测试工具来测试的,结果如下: 总结:你说final的性能比非f ...
- 兰顿蚂蚁 java源代码_兰顿蚂蚁-Java
兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其中一方 ...
- java 汇编_大话+图说:Java 汇编指令——只为让你懂
原标题:大话+图说:Java 汇编指令--只为让你懂 前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指 ...
- java火山_火山代码转java源代码查看
今天我们来研究一下火山安卓的源代码,火山安卓允许我们以本地化编程(中文代码编程)的方式来撰写安卓app,那么在生成实际要安装到安卓app的时候,它是如何进行编译处理的呢.让我们今天来一起探究一下. 首 ...
- 心java源代码_写了一个心形图案的java源代码,想发给朋友,朋友怎样才能像打开文档一样方便查看呢?...
搞清楚java的运行机制你就明白了该怎么办 java源代码->java编译器生成字节码文件->java虚拟机执行字节码文件->心形图案显示 因此你要让朋友直接运行,你就要让上述过程自 ...
- 教学管理系统java源代码_教学管理系统java源代码.doc
教学管理系统java源代码 教学管理系统java源代码 篇一:java学生管理系统源代码 import java.io.Serializable; public class Course implem ...
- 数据库管理系统设计Java源代码_《数据库应用》课程设计人事管理系统(java源代码)...
<数据库应用>课程设计人事管理系统(java源代码) <数据库应用>课程设计人事管理系统(java源代码) <数据库应用>课程设计--人事管理系统(java源代码) ...
- 客栈管理系统java源代码_源码客栈项目源码分类规则
源码客栈团队截至目前已经为Java相关课程设计.实训.毕业设计开发了很多对应的源码,为了整理这些源码我们制定了如下的分类规则,方便大家迅速定位找到合适自己的源码. 星星等级:✩✩星星数量表示难易程度, ...
最新文章
- ADSL上网常见错误提示
- gpt最大分区容量_[电脑知识]GUID(GPT)磁盘全局唯一分区表详解
- Linux下实现apache代理tomcat
- python基因差异分析_差异基因
- VS2008如何添加 OLE/COM 对象查看器 .
- yum安装Mariadb,二进制安装Mariadb
- linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
- IntelliJ IDEA使用技巧——关于版本控制(上)
- python--综合小案例--文件读取以及梳理
- paip.提升效率---质量控制--代码风格模板化
- 阿里云数据盘分区并挂载
- Java内存模型基础知识
- 开发中积累的单词800
- mysql锁历史记录_史上最全MySQL锁机制
- Spark推测执行spark.speculation
- win10重装系统后连不上公司服务器,Win10重装系统后网络连接不了,重装win10系统后不能上网解决方法...
- 安装位置php-fpm,如何查看php-fpm的安装路径
- 攻防世界-leaking-(详细操作)做题过程
- 张柏芝《影子爱人》曝剧照 亲手设浪漫爱情桥段_0
- 拓扑绝缘体 量子计算机,物理所预言立方对称性破缺下的新型拓扑绝缘体材料...
热门文章
- kafka概念使用简介注意点
- Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色...
- bootstrap源码分析之Carousel
- SQL 批量插入有标识列的数据
- java 字节取位_java位 、字节 、字符的梳理
- vue 时间插件_Vue3 插件开发详解尝鲜版「值得收藏」
- swap冒泡函数java_一个冒泡排序程序,將交换数组的两个元素的功能用一个Swap()方法实现...
- 基于modbus协议的工业自动化网络规范_工控学堂:解读Modbus通讯协议「宜收藏」...
- 函数调用关系图如何画_乌鲁木齐126中一校三址关系图出炉!佳源和绿谷应该如何选择?...
- 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔