zoukankan      html  css  js  c++  java
  • [日常] Go语言*--接口约定习题2

    练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列。

    package main
    import(
            "fmt"
            "bytes"
    )
    
    func main(){
            //定义数组
            arr:=[...]int{6,2,1,3,4,5}
            var t *tree
            for i:=0;i<len(arr);i++{
                    t=add(t,arr[i])
            }   
            //t1:=Sort(arr[:],t)
            //fmt.Println(arr)
            fmt.Println(t)
    }
    
    /*
    练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列。
    */
    
    func (t *tree)String()string{
            var buf bytes.Buffer
            var data []int
            data=appendValues(data,t)
            buf.WriteByte('{')
            for _,v:=range data{
                    if buf.Len() > len("{"){
                            buf.WriteByte(' ')
                    }   
                    //重点:使用了接口约定
                    fmt.Fprintf(&buf,"%d",v)
            }   
            buf.WriteByte('}')
            return buf.String()
    }
    
    type tree struct {
        value       int 
        left, right *tree
    }
    
    // Sort sorts values in place.
    func Sort(values []int,root *tree) *tree {
        //var root *tree
        for _, v := range values {
            root = add(root, v)
        }   
    
        fmt.Println(root)
        appendValues(values[:0], root)
        return root
    }
    
    // appendValues appends the elements of t to values in order
    // and returns the resulting slice.
    func appendValues(values []int, t *tree) []int {
        if t != nil {
            values = appendValues(values, t.left)
            values = append(values, t.value)
            values = appendValues(values, t.right)
        }
        return values
    }
    
    func add(t *tree, value int) *tree {
        if t == nil {
            // Equivalent to return &tree{value: value}.
            t = new(tree)
            t.value = value
            return t
        }
        if value < t.value {
            t.left = add(t.left, value)
        } else {
            t.right = add(t.right, value)
        }
        return t
    }
    

      

  • 相关阅读:
    2017.3.11[bzoj2440][中山市选2011]完全平方数
    2017.3.6[hihocoder#1415]后缀数组三·重复旋律3
    2017.3.4[hihocoder#1407]后缀数组二·重复旋律2
    [NOI2013]快餐店
    [HNOI2014]米特运输
    [HNOI2015]亚瑟王
    [JLOI2013]卡牌游戏
    [SDOI2010]地精部落
    [ZJOI2007]棋盘制作
    [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/taoshihan/p/8952023.html
Copyright © 2011-2022 走看看