forked from UNN/2026-rff_mp
- test/ -- папка с файлами для тестов каждой структуры - pkg/ -- папка с реализациями и вспомогательными модулями
91 lines
2.0 KiB
Go
91 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"math/rand"
|
||
"os"
|
||
bst "source/pkg/bin_search_tree"
|
||
ds "source/pkg/data_struct"
|
||
)
|
||
|
||
const (
|
||
countNumbers = 64
|
||
)
|
||
|
||
func pressEnterToContinue() {
|
||
fmt.Print("Нажмите Enter для продолжения...")
|
||
bufio.NewReader(os.Stdin).ReadBytes('\n')
|
||
}
|
||
|
||
// isInArr проверяет, содержится ли target в срезе arr[:len]
|
||
func isInArr(arr []int, length int, target int) bool {
|
||
for i := 0; i < length; i++ {
|
||
if arr[i] == target {
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
func main() {
|
||
fmt.Println("hello world!")
|
||
|
||
var head *bst.BinSearchTree = nil
|
||
|
||
arr := make([]int, countNumbers)
|
||
|
||
var temp int
|
||
for i := 0; i < countNumbers; i++ {
|
||
// Генерируем уникальное случайное число
|
||
for {
|
||
temp = rand.Intn(100) // 0 до 99
|
||
if !isInArr(arr, i, temp) {
|
||
break
|
||
}
|
||
}
|
||
|
||
arr[i] = temp
|
||
|
||
nameStr := fmt.Sprintf("name_%02d", temp)
|
||
phoneStr := fmt.Sprintf("phone_%02d", temp)
|
||
|
||
data := ds.NewData(nameStr, phoneStr)
|
||
|
||
head = head.Insert(*data)
|
||
fmt.Printf("%d ", arr[i])
|
||
}
|
||
|
||
fmt.Printf("\n\nКоличество узлов: %d\n", head.Len())
|
||
|
||
pressEnterToContinue()
|
||
|
||
fmt.Println("\ninorder traversal:")
|
||
head.BstInorderTraversal()
|
||
|
||
tarName := "name_44"
|
||
|
||
fmt.Printf("\nПоиск '%s' перед удалением: ", tarName)
|
||
if found, ok := head.Search(tarName); ok {
|
||
fmt.Printf("Найден: %s\n", found)
|
||
} else {
|
||
fmt.Printf("НЕ найден!\n")
|
||
}
|
||
|
||
fmt.Printf("\nУдаляем элемент с значением %s:\n", tarName)
|
||
|
||
head = head.Delete(tarName)
|
||
|
||
fmt.Printf("\nКоличество узлов после удаления: %d\n", head.Len())
|
||
|
||
fmt.Printf("Поиск '%s' после удаления: ", tarName)
|
||
if found, ok := head.Search(tarName); ok {
|
||
fmt.Printf("ОШИБКА! Все еще существует: %s\n", found)
|
||
} else {
|
||
fmt.Printf("Успешно удален\n")
|
||
}
|
||
|
||
fmt.Println("\ninorder traversal after delete:")
|
||
head.BstInorderTraversal()
|
||
}
|