用JAVA语言,编写一个链表类(双向链表),实现插入,删除,查找操作。新手,要俗易懂些,最好自己调适通过。急

Python016

用JAVA语言,编写一个链表类(双向链表),实现插入,删除,查找操作。新手,要俗易懂些,最好自己调适通过。急,第1张

定义接口:

//Deque.java

package dsa//根据自己的程序位置不同

public interface Deque {

public int getSize()//返回队列元素数目

public boolean isEmpty()//判断队列是否为空

public Object first() throws ExceptionQueueEmpty//取首元素(但不删除)

public Object last() throws ExceptionQueueEmpty//取末元素(但不删除)

public void insertFirst(Object obj)//将新元素作为首元素插入

public void insertLast(Object obj)//将新元素作为末元素插入

public Object removeFirst() throws ExceptionQueueEmpty//删除首元素

public Object removeLast() throws ExceptionQueueEmpty//删除末元素

public void Traversal()//遍历

}

双向链表实现:

//Deque_DLNode.java

/*

* 基于双向链表实现双端队列结构

*/

package dsa

public class Deque_DLNode implements Deque {

protected DLNode header//指向头节点(哨兵)

protected DLNode trailer//指向尾节点(哨兵)

protected int size//队列中元素的数目

//构造函数

public Deque_DLNode() {

header = new DLNode()

trailer = new DLNode()

header.setNext(trailer)

trailer.setPrev(header)

size = 0

}

//返回队列中元素数目

public int getSize()

{ return size}

//判断队列是否为空

public boolean isEmpty()

{ return (0 == size) ? true : false}

//取首元素(但不删除)

public Object first() throws ExceptionQueueEmpty {

if (isEmpty())

throw new ExceptionQueueEmpty("意外:双端队列为空")

return header.getNext().getElem()

}

//取末元素(但不删除)

public Object last() throws ExceptionQueueEmpty {

if (isEmpty())

throw new ExceptionQueueEmpty("意外:双端队列为空")

return trailer.getPrev().getElem()

}

//在队列前端插入新节点

public void insertFirst(Object obj) {

DLNode second = header.getNext()

DLNode first = new DLNode(obj, header, second)

second.setPrev(first)

header.setNext(first)

size++

}

//在队列后端插入新节点

public void insertLast(Object obj) {

DLNode second = trailer.getPrev()

DLNode first = new DLNode(obj, second, trailer)

second.setNext(first)

trailer.setPrev(first)

size++

}

//删除首节点

public Object removeFirst() throws ExceptionQueueEmpty {

if (isEmpty())

throw new ExceptionQueueEmpty("意外:双端队列为空")

DLNode first = header.getNext()

DLNode second = first.getNext()

Object obj = first.getElem()

header.setNext(second)

second.setPrev(header)

size--

return(obj)

}

//删除末节点

public Object removeLast() throws ExceptionQueueEmpty {

if (isEmpty())

throw new ExceptionQueueEmpty("意外:双端队列为空")

DLNode first = trailer.getPrev()

DLNode second = first.getPrev()

Object obj = first.getElem()

trailer.setPrev(second)

second.setNext(trailer)

size--

return(obj)

}

//遍历

public void Traversal() {

DLNode p = header.getNext()

while (p != trailer) {

System.out.print(p.getElem()+" ")

p = p.getNext()

}

System.out.println()

}

}

新建个队列依次往里放就是了。就这样:

ArrayList a;//你已经有的a;

ArrayList b;//你已经有的b;

ArrayList c= new ArrayList()

比较a.size()大还是b.size()大,大的=e,小的=q

for(int i=0i<ei++){

if(i<q){

c.add(a.get(i))

c.add(b.get(i))

}

if(i>=q){

c.add(b.get(i))

}

}

写的这样也差不多了吧