데이터 구조의 간단 한 해시
9474 단어 데이터 구조
// boolean is_searched=false;
boolean is_removed=false;
boolean is_reseted=false;
//
private Node[] array;
//
private int size;
//
private double fa_value=0.8;
//
private int sum=0;
/**
* hash
* @param qq
* @return
*/
private int hash(QQ qq){
return qq.getNumber()%size;
}
2. 맵 을 통 해 얻 은 배열 아래 표 시 를 하면 데 이 터 를 저장 할 수 있 습 니 다. 이 값 에 대응 하 는 배열 요소 가 비어 있 으 면 데 이 터 를 저장 할 수 있 습 니 다. 한 노드 를 예화 하고 데 이 터 를 노드 속성 값 으로 설정 한 다음 에 노드 를 배열 에 저장 할 수 있 습 니 다. 비어 있 지 않 으 면 빈 배열 요소 (즉 노드) 가 아 닌 바이트 가 비어 있 는 지 판단 하고 비어 있 으 면 노드 를 예화 하고 하위 노드 로 저장 합 니 다.비어 있 지 않 으 면 아래 의 하위 노드 로 판단 합 니 다.빈 위치 로 판단 할 때 까지 데 이 터 를 굵게 합 니 다.
/**
*
* @param qq
* @return
*/
public boolean add(QQ qq){
//
if(((double)sum/size)>fa_value){
rehash();// ,
}
// qq
int index = hash(qq);
// node null
if(array[index]==null){
// QQ
array[index]=new Node(qq);
sum++;
return true;
}else{
is_kong(array[index], qq);
return true;
}
}
/**
* , 。
* @param node
*/
private void is_kong(Node node,QQ qq){
if(node.getNext()==null){
//
Node childnode=new Node(qq);
node.setNext(childnode);
System.out.println(" ");
sum++;
}else{
//
is_kong(node.getNext().getNext(),qq);
}
}
/**
* array
*/
private void rehash(){
sum=0;
// ,
size*=2;
Node[] array2=new Node[size];
Node[] array3=array;
array=array2;
//
for(int i=0;i<array3.length;i++){
//
if(array3[i]!=null){
add(array3[i].getData());
}
}
}
찾기: 물론 키워드 qq 번 호 를 이용 하여 사용자 정 보 를 찾 을 수 있 습 니 다. 1. qq 번 호 를 이용 하여 hash 알고리즘 을 통 해 얻 은 매 핑 값 은 서로 의존 하 는 배열 요소 (하나의 노드 이 고 긴 체인 으로 이해 할 수 있 습 니 다) 를 찾 으 면 우리 가 찾 아야 할 데 이 터 는 이 노드 나 노드 아래 의 하위 노드 에 있 습 니 다.이 데이터 가 이 구조 안에 존재 하지 않 는 한 2. 아래 표 시 된 배열 요 소 를 추출 하여 이 요소 가 비어 있 는 지 판단 합 니 다. 비어 있 지 않 으 면 노드 의 데이터 속성 이 같 는 지 판단 하고 같 으 면 찾 을 수 있 습 니 다.다 르 면 뒤쪽 부분 으로 찾 아 보 세 요. 중대 의 결말 까지.비어 있 으 면 이 사용자 의 정보 가 존재 하지 않 는 다 고 판단 합 니 다. 아래 에서 얻 은 요소 가 비어 있 으 면 사용자 정보 가 존재 하지 않 는 다 고 판단 할 수 있 습 니 다.
/**
* qq
* @param qqnumber
*/
public boolean search(int qqnumber){
is_searched=false;
//
for(int i=0;i<array.length;i++){
if(array[i]!=null){
// qq
if(array[i].getData().getNumber()==qqnumber){
System.out.println(" :"+
array[i].getData().getName()+" " +
"qq :"+array[i].getData().getNumber());
is_searched=true;
}else{
bianli(array[i].getNext(),qqnumber);
}
}
}
return is_searched;
}
/**
*
* @param node
*/
private void bianli(Node node,int qqnumber){
//
if(node!=null){
// qq
if(node.getData().getNumber()==qqnumber){
System.out.println(" :"+
node.getData().getName()+" " +
"qq :"+node.getData().getNumber());
is_searched=true;
}else{
// qq
bianli(node.getNext(),qqnumber);
}
}
}
삭제:
1. 찾기 와 같 습 니 다.데 이 터 를 찾 을 때 데 이 터 를 저장 하 는 노드 에 하위 노드 가 있 으 면 이 노드 를 하위 노드 로 대체 하면 됩 니 다.
/**
* qq
* @param qqnumber
*/
public boolean remove(int qqnumber){
is_removed=false;
//
for(int i=0;i<array.length;i++){
if(array[i]!=null){
// qq
if(array[i].getData().getNumber()==qqnumber){
if(array[i].getNext()==null){
//
array[i]=null;
is_removed=true;
}else{
array[i]=array[i].getNext();
}
}else{
bianli2(array[i],qqnumber);
}
}
}
return is_removed;
}
/**
*
* @param node
*/
private void bianli2(Node node,int qqnumber){
//
if(node.getNext()!=null){
// qq
if(node.getNext().getData().getNumber()==qqnumber){
node.setNext(node.getNext().getNext());
System.out.println(" !!");
is_removed=true;
}
}else{
return;
}
}
수정: 위 에 있 는 거 있 으 면 이거 쉬 워.해당 데이터 에 대응 하 는 노드 를 찾 으 면 노드 데이터 속성 을 바 꾸 면 ok 입 니 다.
/**
* qq
* @param qqnumber
*/
public boolean reSet(int qqnumber,String newname){
is_reseted=false;
//
for(int i=0;i<array.length;i++){
if(array[i]!=null){
// qq
if(array[i].getData().getNumber()==qqnumber){
array[i].getData().setName(newname);
is_reseted=true;
}else{
bianli3(array[i],qqnumber,newname);
}
}
}
return is_reseted;
}
/**
*
* @param node
* @param newname
*/
private void bianli3(Node node,int qqnumber,String newname){
if(node.getNext()!=null){
if(node.getNext().getData().getNumber()==qqnumber){
node.getNext().getData().setName(newname);
is_reseted=true;
}else{
bianli3(node.getNext().getNext(),qqnumber,newname);
}
}else{
return ;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.