JAVA-JAVAで双方向チェーンテーブルの添削を実現
4139 ワード
このチェーンテーブルでは、関数が持つ機能は、新しいチェーンテーブルの一環を挿入し、指定された下付き文字を削除し、内容に基づいて変更内容がチェーンテーブルに存在するかどうかを調べ、内容に基づいて下付き文字を返し、下付き文字の変更値を指定し、指定された下付き文字の値を取得し、チェーンテーブルの長さとクリアチェーンテーブルを取得することです.
このコードではjavaとCのチェーンテーブルの定義とノード挿入の定義を区別することに重点を置いており,残りの基本差は多くなく,概念もほとんど変わらない.
このコードではjavaとCのチェーンテーブルの定義とノード挿入の定義を区別することに重点を置いており,残りの基本差は多くなく,概念もほとんど変わらない.
package linkList;
interface Link{
void add(Object obj);
boolean remove(int index);
boolean contain(Object obj);
int indexOf(Object obj);
boolean set(int index,Object obj);
Object get(int index);
int length();
void clear();
Object[] toArray();
void printLink();
boolean inList(int index);
}
class Factory{
private Factory() { }
public static Link getlinkInstance() {
return new LinkImpl();
}
}
class LinkImpl implements Link{
private Node first;
private Node last;
private int size;
private class Node{
private Node prev;
private Object data;
private Node next;
private Node(Node prev,Object data,Node next) {
this.prev=prev;
this.data=data;
this.next=next;
}
}
@Override
public void add(Object obj) {
Node tmp = this.last;
Node newNode=new Node(tmp,obj,null);
last=newNode;
if(tmp == null) {
this.first=newNode;
}
else {
tmp.next=newNode;
}
this.size++;
return;
}
@Override
public boolean remove(int index) {
if(!inList(index)) {
return false;
}
Node curNode=toNode(index);
if(curNode == first) {
if(curNode == last) {
curNode.data=null;
curNode=null;
this.size--;
}
first=curNode.next;
first.prev=null;
curNode.next=null;
curNode.data=null;
this.size--;
return true;
}
if(curNode == last) {
last=curNode.prev;
last.next=null;
curNode.prev=null;
curNode.data=null;
this.size--;
return true;
}
else {
curNode.prev.next=curNode.next;
curNode.next.prev=curNode.prev;
curNode.prev=null;
curNode.next=null;
curNode.data=null;
this.size--;
return true;
}
}
@Override
public boolean contain(Object obj) {
for(Node curNode=first;curNode != null;curNode=curNode.next) {
if(curNode.data == obj) {
return true;
}
}
return false;
}
@Override
public int indexOf(Object obj) {
int i=0;
for(Node curNode=first;curNode !=null;curNode=curNode.next) {
if(curNode.data == obj) {
return i;
}
i++;
}
return -1;
}
@Override
public boolean set(int index, Object obj) {
if(!inList(index)) {
return false;
}
Node curNode=toNode(index);
curNode.data=obj;
return true;
}
@Override
public Object get(int index) {
if(!inList(index)) {
return null;
}
Object result;
Node curNode=toNode(index);
result=curNode.data;
return result;
}
@Override
public int length() {
return size;
}
@Override
public void clear() {
Node curNode=first;
for(;curNode != null;) {
Node tmp=curNode.next;
curNode.next=null;
curNode.prev=null;
curNode.data=null;
curNode=tmp;
}
this.last=this.first=null;
this.size=0;
return;
}
@Override
public Object[] toArray() {
Object[] tar = new Object[size];
int i=0;
for(Node curNode=first;curNode != null;curNode=curNode.next) {
tar[i]=curNode.data;
i++;
}
return tar;
}
@Override
public void printLink() {
Object[] result = this.toArray();
for(Object object : result) {
System.out.println(object);
}
}
@Override
public boolean inList(int index) {
if(index >=0 && index <=size) {
return true;
}
return false;
}
private Node toNode(int index) {
if(!inList(index)) {
return first ;
}
if(index >1)) {
int i=0;
Node curNode=first;
for(;i!=index;curNode=curNode.next,i++) {}
return curNode;
}
else {
int i=size;
Node curNode=last;
for(;i!=index;curNode=curNode.prev) {i--;}
return curNode;
}
}
}
public class Test {
public static void main(String[] args) {
Link link=Factory.getlinkInstance();
link.add(" ");
link.add(" ");
link.add(" ");
link.add(" ");
link.set(1, " ");
System.out.println(link.indexOf(" "));
System.out.println(link.contain(" "));
System.out.println(link.length());
link.remove(3);
link.printLink();
}
}