Go语言数据结构与接口实践

19、对 queue.go 的代码进行必要的修改,以便存储浮点数而非整数。

要对 queue.go 代码进行修改以存储浮点数而非整数,需要在代码中进行如下操作:

  1. 将队列数据结构中存储元素的类型从整数类型(如 int )修改为浮点数类型(如 float32 float64 );
  2. 把入队、出队等操作涉及的元素类型也相应修改为浮点数类型;
  3. 检查代码中所有与元素类型相关的函数和操作,将其参数和返回值类型都修改为浮点数类型。

20、你能否修改 Go 语言编写的双向链表代码,使链表节点保持有序?并开发一个删除现有节点的函数。

package main

import "fmt"

// Node 定义双向链表节点结构
type Node struct {
    Value int
    Prev  *Node
    Next  *Node
}

var root *Node

// addNode 有序插入节点
func addNode(t *Node, v int) int {
    if root == nil {
        t = &Node{v, nil, nil}
        root = t
        return 0
    }
    if v < root.Value {
        newNode := &Node{v, nil, root}
        root.Prev = newNode
        root = newNode
        return 0
    }
    for t.Next != nil && t.Next.Value < v {
        t = t.Next
    }
    if t.Next != nil && t.Next.Value == v {
        fmt.Println("Node already exists:", v)
        return -1
    }
    newNode := &Node{v, t, t.Next}
    if t.Next != nil {
        t.Next.Prev = newNode
    }
    t.Next = newNode
    return 0
}

// deleteNode 删除节点
func deleteNode(v int) bool {
    if root == nil {
        return false
    }
    if root.Value == v {
        if root.Next != nil {
            root.Next.Prev = nil
        }
        root = root.Next
        return true
    }
    t := root
    for t.Next != nil {
        if t.Next.Value == v {
            if t.Next.Next != nil {
                t.Next.Next.Prev = t
            }
            t.Next = t.Next.Next
            return true
        }
        t = t.Next
    }
    return false
}

func main() {
    addNode(root, 1)
    addNode(root, 10)
    addNode(root, 5)
    addNode(root, 0)
    addNode(root, 100)

    // 打印链表
    t := root
    for t != nil {
        fmt.Print(t.Value, " -> ")
        t = t.Next
    }
    fmt.Println()

    // 删除节点
    deleteNode(10)

    // 再次打印链表
    t = root
    for t != nil {
        fmt.Print(t.Value, " -> ")
        t = t.Next
    }
    fmt.Println()
}

上述代码中, addNode 函数实现了有序插入节点, deleteNode 函数实现了删除指定值的节点。在 main 函数中,先插入一些节点,然后删除一个节点并再次打印链表,以验证功能。

21、修改 hashTableLookup.go 的代码,使哈希表中没有重复值。为此要使用 lookup() 函数!

要修改 hashTableLookup.go 的代码以避免哈希表中出现重复值,可在插入新元素前使用 lookup() 函数检查该元素是否已存在。假设存在插入函数 insert() ,以下是修改示例:

func insert(hash *HashTable, value int) bool {
    if lookup(hash, value) {
        return false // 元素已存在,不插入
    }
    index := hashFunction(value, hash.Size)
    newNode := &Node{Value: value, Next: nil}
    if hash.Table[index] == nil {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值