golangハッシュハッシュテーブルのデータ構造(ハッシュ)

hash.go

ハッシュパッケージ

のインポート(
    " FMTは" 

のEmp型構造体{ 
    ID    INT 
    名前ストリング
    次に * のEmp 
} 

// 店舗従業員の最初のノード 
タイプEmpLinkの構造体{ 
    ヘッド * のEmp 
} 

//は、ハッシュテーブルを定義する 
ハッシュテーブル型のstruct { 
    LinkArr [ 7 ] EmpLinkを
} 

// 従業員を添加する方法 
FUNC(EMPL * EmpLink)InsertEmp(EMP * EMP){ 
    CUR: = empl.Headの
     VAR* = EMPが事前ゼロ
     IF CUR == nilの{ 
        empl.Head = EMP
         リターン
    } 
    // それは空のリストがない場合は、対応する位置を検索し、挿入
    のための{
         IF CUR!= nilの{
             IF cur.ID> = emp.ID {
                 BREAK 
            } 
            事前 = CUR 
            CUR = cur.Next 
        } {
             BREAK 
        } 
    } 
    pre.Next = EMP 
    emp.Next = CUR
} 
FUNC(ハッシュ *ハッシュテーブル)を挿入(* EMP EMP){
     // 従業員のリストを追加するために決定されるハッシュ関数、 
    linkNum:= hash.HashFunc(emp.ID)
    hash.LinkArr [linkNum] .InsertEmp(EMP)を
} 

FUNC(EMPL * EmpLink)findById(IDのint型)* のemp { 
    CUR: = empl.Head
     ための{
         IF CUR = nilの&& cur.ID ==!ID {
             戻りCUR 
        } 他の IF CUR == nilの{
             BREAK 
        } 
        CUR = cur.Next 
    }
    リターンゼロ
} 

FUNC(ハッシュ *ハッシュテーブル)を見つける(IDのINT)* のemp {
     // のどのリストを決定するためにハッシュ関数 
    linkNum:= hash.HashFunc(ID)
     リターンhash.LinkArr [linkNum] .FindByID(ID)
} 

/ / 方法ハッシュ 
FUNC(ハッシュハッシュテーブル*)HashFunc(IDのINTINT {
     戻り ID%7 
} 
FUNC(EMPL * EmpLink)ShowLink(NUMのINT ){
     IF empl.Head == ゼロ{ 
        fmt.Printf(現在%dをリストは空です\ N- 、NUM)
         リターン 
    }
    // そうでない場合は、表示データの行き来 
    =:CUR empl.Headを
     するために、{
         IF!CUR = 無記号{ 
            fmt.Printf(" - >%S:%dの、従業員ID:%dを、従業員名リスト" 、NUM、CUR。 ID、cur.Name)
            CUR = cur.Next 
        } {
             BREAK 
        } 
    } 
    fmt.Println( ``)
} 

FUNC(ハッシュ * ハッシュテーブル)を表示(){
      I:= 0 ; I <lenの(hash.LinkArr)。 ++ I { 
        hash.LinkArr [I] .ShowLink(I)
    } 
}

FUNC(EMP* EMP)SHOWME(){ 
    fmt.Printf(" リストは、従業員を見つけること%D%D \ N- "、emp.ID%。7 、emp.ID)
}

main.go

主パッケージ

のインポート(
    " FMT " 
    " go_code / data_structure /ハッシュ" 
    " OS " 

FUNCメイン(){ 

    キー: = "" 
    ID: = 0 
    名: = "" 
    VAR ハッシュテーブルhash.HashTable
     { 
        fmt.Println(" = =========従業メニュー========== " 
        fmt.Println(" INSERTの追加の従業員が表現" 
        fmt.Println(" ショーが表示された従業員を表します
        FMT。println( "見つけ従業員は、そのクエリを示している
        fmt.Println(従業員を終了する終了
        fmt.Printlnを(:あなたの選択を入力してください
        fmt.Scanln( キー)
         スイッチキー{
         ケース INSERTを
            fmt.Println(上記IDの上に従業員を入力してください:" 
            fmt.Scanln( 上述のID以上)
            fmt.Println(" 従業員の名前を入力してください:" 
            fmt.Scanln( 名)
            EMP: =&hash.Emp {
                ID:ID、
                名前:名前、
            } 
            hashTable.Insert(EMP)
        ケース " ショー" 
            hashTable.Show()
        ケース " 検索" 
            fmt.Println(" 検索したいIDを入力してください:" 
            fmt.Scanln( ID)
            EMP: = hashTable.Find(ID)
             IF EMP == ゼロ{ 
                fmt.Printf(" ID =%N Dスタッフが\存在しない" 、ID)
            } {
                // 表示従業員情報
                emp.ShowMe()

            } 
        ケース " 出口" 
            os.Exit(0 
        } 
    } 
}

結果:

F:\ goproject \ SRC \ go_code \ data_structure>ゴーRUN main.go
==========従業メニュー==========
INSERTは追加の従業員が表す
表示は、従業員が表す表示され
、従業員は、クエリを表し見つけます
従業員の退出手段出口
あなたの選択を入力してください:
INSERTは、
上述したIDの上の従業員を入力してください:
1
、従業員の名前を入力してください:
ボブ
==========従業メニュー==========
INSERT追加スタッフを表す
ショーをディスプレイは、従業員が表す
クエリスタッフのことを示して見つける
の従業員を終了する終了
:あなたの選択を入力してください
INSERTは、
上述したIDの上の従業員を入力してください:
8
:従業員の名前を入力してください
マイク
========== ========従業員のメニューを==
INSERTは追加の従業員を表す
表示は、従業員が表す表示され
、クエリのスタッフのことを示して見つける
の従業員を終了する終了
あなたの選択を入力してください:
INSERTは、
上述したIDの上の従業員を入力してください:
15
従業員の名前を入力してください:
トム
==========従業メニューを= =========
インサートは、追加スタッフ表し
ショーの表示は、従業員が表す
クエリスタッフのことを示して見つける
の従業員を終了する終了
:あなたの選択を入力してください
インサートは、
上述したIDの上に従業員を入力してください:
57
:従業員の名前を入力してください
POP
========== ===従業員のメニューを=======
INSERTは、追加の従業員が表す
表示は、従業員が表す表示され
、クエリのスタッフのことを示して見つける
の従業員を終了する終了
:あなたの選択を入力してください
表示され
、現在のリストが空0である
リスト:1社員ID:1、名の従業員:bob-- >リスト:1従業員ID:8、従業員名:マイク- >リスト:1従業員ID:15、従業員名:トム- >リスト:1従業員ID:57、従業員名:ポップ- >
現在2リストが空である
現在のリストが空で3
電流4リストが空である
現在の5リストは空である
現在のリストが空6人の
==========従業メニュー==========
INSERTアドスタッフ表現
ショーの表示は、従業員が表す
クエリスタッフのことを示して見つける
の従業員を終了する終了
:あなたの選択を入力してください
INSERTは、
上述したIDの上の従業員を入力してください:
36
:従業員の名前を入力してください
BIBを
==========従業メニュー==========
INSERTが追加従業員を表す
表示は、従業員が表す示し
見つけるクエリスタッフのことを示している
従業員を終了する終了
あなたの選択を入力してください
示して
現在のリストが空である0
リスト:1人の社員ID:1、スタッフ名:ボブ- >リスト:1人の従業員ID:8、従業員名:マイク- >リスト:1人の従業員ID:15、従業員名:トム- >リスト: 1つの従業員番号:36、従業員名:ゼッケン- >リスト:1従業員番号:57、従業員名:POP - >
現在の2リストが空である
現在のリスト空3れる
電流4リストは空である
現在のリスト空で5
現在のリストが空で6人のある
========== ==========従業メニュー
INSERTが追加従業員を表す
表示は、従業員が表す示し
見つけるクエリスタッフのことを示している
出口が従業員を終了するために
あなたの選択を入力してください:
INSERTを
上記IDの上に従業員を入力してください:
12
従業員の名前を入力してください:
VIV
==========従業メニュー==========
INSERTが追加従業員を表すが
、ディスプレイは、従業員が表す示し
見つけるクエリスタッフのことを示している
ため出口が従業員を辞め
あなたの選択を入力してください:
ショー
現在のリストは空0である
1人の社員ID:1、スタッフ名:ボブ- >リスト:リスト1人の従業員ID:8、従業員名:マイク- >リスト:1人の従業員ID:15、従業員の名前:トム- >リスト:1人の従業員番号:36、従業員名:ゼッケン- >リスト:1人の従業員番号:57、従業員名:ポップ- >
現在のリストが2空で
現在3のリストが空である
現在のリストが空である4
リスト:5、従業員ID:12、従業員名:VIV - >
現在のリストが空である6人の
==========従業メニュー==========
INSERTが追加従業員を表すには
、ディスプレイを示して示して従業員が
見つけ、クエリのスタッフのことを示している
出口は従業員が終了する
:あなたの選択を入力してください
見つける
あなたが探しているあなた、入力されたIDを:
12
見つかっリスト5その12人の従業
========== =======従業メニュー===
INSERTは追加の従業員を表す
表示は、従業員が表す表示され
、クエリのスタッフのことを示して見つける
の従業員を終了する終了
あなたの選択を入力してください:
見つける
あなたが探しているあなた、入力されたIDを:
7
= 7人の従業員IDは存在しませんが
======== ==従業メニュー==========
INSERTは追加の従業員を表す
表示は、従業員が表す表示され
、従業員は、クエリを表し見つけます
出口は、従業員の終了を意味
:あなたの選択を入力してください
終了を

F:\ goproject \ SRC \ go_code \ data_structure>

おすすめ

転載: www.cnblogs.com/xiximayou/p/12029622.html