Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "time"
- )
- // Struktur data untuk profil user
- type UserProfile struct {
- Username string
- FullName string
- Email string
- Phone string
- Bio string
- DateJoined string
- }
- // Struktur untuk hash table dengan chaining
- type HashTable struct {
- Size int
- Table [][]UserProfile // Menggunakan slice of slice untuk chaining
- }
- // Hash function menggunakan djb2
- func (ht *HashTable) _hashFunction(key string) int {
- hash := uint32(5381)
- for i := 0; i < len(key); i++ {
- hash = ((hash << 5) + hash) + uint32(key[i])
- }
- return int(hash % uint32(ht.Size))
- }
- // Fungsi untuk menambahkan user ke hash table
- func (ht *HashTable) Insert(user UserProfile) {
- index := ht._hashFunction(user.Username)
- bucket := &ht.Table[index]
- // Cek apakah username sudah ada
- for _, u := range *bucket {
- if u.Username == user.Username {
- fmt.Println("Username", user.Username, "sudah ada!")
- return
- }
- }
- // Menambahkan user ke dalam bucket
- *bucket = append(*bucket, user)
- fmt.Println("User", user.Username, "berhasil ditambahkan.")
- }
- // Fungsi untuk mencari user berdasarkan username
- func (ht *HashTable) Search(username string) *UserProfile {
- index := ht._hashFunction(username)
- bucket := ht.Table[index]
- // Mencari user dalam bucket
- for _, user := range bucket {
- if user.Username == username {
- return &user
- }
- }
- return nil
- }
- // Fungsi untuk menampilkan isi hash table
- func (ht *HashTable) Display() {
- for i, bucket := range ht.Table {
- if len(bucket) > 0 {
- fmt.Printf("Index %d: %v\n", i, bucket)
- }
- }
- }
- // Fungsi utama untuk menjalankan program
- func main() {
- // Inisialisasi hash table
- hashTable := HashTable{Size: 100, Table: make([][]UserProfile, 100)}
- // Menambahkan beberapa user
- user1 := UserProfile{"paijo", "Paijo bin Joe", "[email protected]", "08123456789", "Project Manager", time.Now().Format("2006-01-02 15:04:05")}
- user2 := UserProfile{"paiman", "Paiman Jane", "[email protected]", "08129876543", "Software Engineer", time.Now().Format("2006-01-02 15:04:05")}
- user3 := UserProfile{"sugiman", "Sugiman bin Smith", "[email protected]", "08121212121", "Data Scientist", time.Now().Format("2006-01-02 15:04:05")}
- hashTable.Insert(user1)
- hashTable.Insert(user2)
- hashTable.Insert(user3)
- // Mencari user
- searchUsername := "paijo"
- foundUser := hashTable.Search(searchUsername)
- if foundUser != nil {
- fmt.Printf("User ditemukan: %+v\n", *foundUser)
- } else {
- fmt.Println("User", searchUsername, "tidak ditemukan.")
- }
- // Menampilkan isi hash table
- hashTable.Display()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement