欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > java >内容正文

java

大话数据结构 java源代码-凯发k8官方网

发布时间:2024/10/6 java 3 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 大话数据结构 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;

}

}

总结

以上是凯发k8官方网为你收集整理的大话数据结构 java源代码_大话数据结构(八)java程序——双向链表的实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图