* 条件语句中的判断部分,要把判断对象是否为null的表达式 写在 && 的最前面,这样保证 && 后的语句不会访问空引用;
* 突然发现学java好像在游戏里练级…你的代码行数就是经验值~求双倍,三倍,四倍经验!
* 实现了基于链地址法进行冲突处理的哈希表@java/DataStructure/unit11
class Data{
private int key;
private double data;
public Data(int key, double data){
this.key=key;
this.data=data;
}
public Data(){
key=0;
data=0;
}
public int getKey(){
return key;
}
public void setKey(int newKey){
key=newKey;
}
public double getData(){
return data;
}
public void display(){
System.out.print("["+key+", "+data+"] ");
}
}
class Link{
private Data data;
public Link next;
public Link(Data data){
this.data=data;
next=null;
}
public Link(){
data=null;
next=null;
}
public Data getData(){
return data;
}
public void display(){
data.display();
}
}
class LinkList{
private Link head;
public LinkList(){
head=null;
}
public Link getHead(){
return head;
}
public void insert(Link newLink){
if(head==null) head=newLink;
else{
Link current=head;
Link prev=head;
while(current!=null && current.getData().getKey()<newLink.getData().getKey()){
prev=current;
current=current.next;
}
if(current==head){
newLink.next=head;
head=newLink;
}
else{
prev.next=newLink;
newLink.next=current;
}
}
}
public Link delete(int key){
if(head==null){
System.out.println("Can not Delete: Empty LinkList!");
return null;
}
else{
Link current=head;
Link prev=current;
while(current!=null && current.getData().getKey()!=key){
prev=current;
current=current.next;
}
if(current==null){
System.out.println("Can not Delete: Not Found!");
return null;
}
else if(current==head){
Link temp=head;
head=head.next;
return temp;
}
else{
prev.next=current.next;
return current;
}
}
}
public Link find(int key){
if(head==null){
System.out.println("Can not Find: Empty LinkList!");
return null;
}
else{
Link current=head;
while(current!=null && current.getData().getKey()!=key){
current=current.next;
}
if(current==null){
System.out.println("Can not Find: Not Exist!");
return null;
}
else return current;
}
}
public void display(){
if(head==null){
System.out.println("Empty List!");
return;
}
Link current=head;
int counter=0;
while(current!=null){
current.display();
current=current.next;
if(++counter==5){
System.out.println();
counter=0;
}
}
System.out.println();
}
}
class HashTable{
private LinkList [] lArr;
private int size;
private int current;
public HashTable(int max){
lArr=new LinkList[max];
size=max;
current=0;
}
public void insert(Link newLink){
int key=newLink.getData().getKey()%size;
if(current==size){
System.out.println("Can no Insert: The HashTable is Full!");
}
if(lArr[key]==null){
lArr[key]=new LinkList();
current++;
}
lArr[key].insert(newLink);
}
public Link delete(int key){
int obj=key%size;
if(lArr[obj]==null){
System.out.println("Can not Delete: Not Exist!");
return null;
}
else return lArr[obj].delete(key);
}
public Link find(int key){
int obj=key%size;
if(lArr[obj]==null){
System.out.println("Can not Find: Not Exist!");
return null;
}
else return lArr[obj].find(key);
}
public void display(){
for(int i=0; i<size; i++){
if(lArr[i]==null || lArr[i].getHead()==null){
System.out.println("The "+i+" LinkList is Empty!");
continue;
}
System.out.println("The "+i+" LinkList: ");
lArr[i].display();
}
}
}