オープンアドレス法(閉ハッシュ)の辞書講座の要素を全て空にするメソッドmakenull()を考えているのですが、どの様にすれば全ての格納空間の値が空になるのか分かりません…
「配列を用いた閉ハッシュ辞書構造」の class dictを用いて作成しております。
どの様にすればclass dictの辞書を全て空に出来るでしょうか?
プログラム
import java.util.Scanner; class dict { // 配列を用いた閉ハッシュ辞書構造 static final int HASHBASE=101; // 省略時最大セル数 static final int UNUSED=0; // 未使用 static final int USING=1; // 使用中 static final int DELETED=2; // 削除 int N; // 要素数 0<= N <= MAX int[] value; // ハッシュ空間 int[] stat ; // 要素状態 dict() { // コンストラクタ int k ; N=0 ; value = new int[HASHBASE] ; stat = new int[HASHBASE] ; for (k=0;k<HASHBASE; k++ ) stat[k]=UNUSED ; } int hash( int v ) { return v % HASHBASE ; } void print() { // 表示 int k ; for (k=0; k<HASHBASE; k++) if (stat[k]==USING) System.out.print( k + ":" + value[k] + " "); System.out.println() ; } int member ( int val ) { // 探索 O(1), 最悪 O(N) int k,k1 ; k=hash( val ) ; for (k1=0; k1 < HASHBASE; k1++) { if ((stat[(k+k1)%HASHBASE]==USING) && (value[(k+k1)%HASHBASE] == val)) return (k+k1)%HASHBASE ; if (stat[(k+k1)%HASHBASE]==UNUSED) return -1 ; } return -1 ; // 無かった } void delete ( int val ) { // 削除 O(1), 最悪 O(N) int k,k1 ; k=hash( val ) ; for (k1=0; k1 < HASHBASE; k1++) { // 空き線形探索 if ((stat[(k+k1)%HASHBASE]==USING) && (value[(k+k1)%HASHBASE] == val)) { stat[(k+k1)%HASHBASE]=DELETED ; N--; return ; } else if (stat[(k+k1)%HASHBASE]==UNUSED) return ; // ここから先はない } return ; // 無かった }
試した事
単に要素数Nを0にすれば消えるのではないかと思って実行しましたが、消えませんでした。
void makenull (){N=0}
解決したい事
どの様な操作を行えば、配列による閉ハッシュ辞書構造の中身は消えてくれるのかご教授頂きたいです。
初歩的な質問ですみませんが、回答お願い致しますm(_ _)m
回答1件
あなたの回答
tips
プレビュー