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

  1. package main
  2. import(
  3. "fmt"
  4. "bytes"
  5. )
  6.  
  7. func main(){
  8. //定义数组
  9. arr:=[...]int{6,2,1,3,4,5}
  10. var t *tree
  11. for i:=0;i<len(arr);i++{
  12. t=add(t,arr[i])
  13. }
  14. //t1:=Sort(arr[:],t)
  15. //fmt.Println(arr)
  16. fmt.Println(t)
  17. }
  18.  
  19. /*
  20. 练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列。
  21. */
  22.  
  23. func (t *tree)String()string{
  24. var buf bytes.Buffer
  25. var data []int
  26. data=appendValues(data,t)
  27. buf.WriteByte('{')
  28. for _,v:=range data{
  29. if buf.Len() > len("{"){
  30. buf.WriteByte(' ')
  31. }
  32. //重点:使用了接口约定
  33. fmt.Fprintf(&buf,"%d",v)
  34. }
  35. buf.WriteByte('}')
  36. return buf.String()
  37. }
  38.  
  39. type tree struct {
  40. value int
  41. left, right *tree
  42. }
  43.  
  44. // Sort sorts values in place.
  45. func Sort(values []int,root *tree) *tree {
  46. //var root *tree
  47. for _, v := range values {
  48. root = add(root, v)
  49. }
  50.  
  51. fmt.Println(root)
  52. appendValues(values[:0], root)
  53. return root
  54. }
  55.  
  56. // appendValues appends the elements of t to values in order
  57. // and returns the resulting slice.
  58. func appendValues(values []int, t *tree) []int {
  59. if t != nil {
  60. values = appendValues(values, t.left)
  61. values = append(values, t.value)
  62. values = appendValues(values, t.right)
  63. }
  64. return values
  65. }
  66.  
  67. func add(t *tree, value int) *tree {
  68. if t == nil {
  69. // Equivalent to return &tree{value: value}.
  70. t = new(tree)
  71. t.value = value
  72. return t
  73. }
  74. if value < t.value {
  75. t.left = add(t.left, value)
  76. } else {
  77. t.right = add(t.right, value)
  78. }
  79. return t
  80. }

  

[日常] Go语言圣经--接口约定习题2的更多相关文章

  1. [日常] Go语言圣经--接口约定习题

    Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...

  2. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...

  3. [日常] Go语言圣经-匿名函数习题

    Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...

  4. [日常] Go语言圣经-竞争条件习题

    package main import( "fmt" "sync" ) var balance int func Deposit(amount int) { b ...

  5. [日常] Go语言圣经-可变参数习题

    1.参数数量可变的函数称为为可变参数函数,例子就是fmt.Printf和类似函数2.参数列表的最后一个参数类型之前加上省略符号“...”3.虽然在可变参数函数内部,...int 型参数的行为看起来很像 ...

  6. [日常] Go语言圣经-匿名函数习题2

    练习5.13: 修改crawl,使其能保存发现的页面,必要时,可以创建目录来保存这些页面.只保存来自原始域名下的页面.假设初始页面在golang.org下,就不 要保存vimeo.com下的页面. p ...

  7. [日常] Go语言圣经-函数递归习题

    练习 5.1: 修改findlinks代码中遍历n.FirstChild链表的部分,将循环调用visit,改成递归调用. 练习 5.2: 编写函数,记录在HTML树中出现的同名元素的次数. 练习 5. ...

  8. [日常] Go语言圣经-Slice切片习题

    1.Slice(切片)代表变长的序列,序列中每个元素都有相同的类型,一个slice类型一般写作[]T,其中T代表slice中元素的类型:slice的语法和数组很像,只是没有固定长度而已,slice的底 ...

  9. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

随机推荐

  1. 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter

    [源码下载] 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter 作者:weba ...

  2. 【转】TOP10美国虚拟主机/网站空间推荐

    原文:http://www.laozuo.org 不同的站长用户需要不同的主机产品,并不是所有的站长, 所有的网站都想放置在VPS服务器中的.虚拟主机也有虚拟主机的方便和优势,下面为老左精选的10个比 ...

  3. qt在windows下编译遇到的一些问题

    软件是在linux上写的,然而搬到windows上来遇到了好多问题.... 想跪.... 首先就是压根编译不了的问题....这个问题困扰我好久了....一直报错undefined reference ...

  4. .NET Core中使用EF Core连接MySQL

    最近一直在捣鼓.NET Core方面的东西,顺便写下点东西记录下 1.打开vs2017,新建一个项目 2.vs会自动生成一个项目,然后打开NuGet搜索MySql.Data.EntityFramewo ...

  5. execution表达式--小坑

    之前使用的都是eclipse,今天开始复习spring了,开始接触IDEA,在复习过程中,出了点小事, 复习到AOP开发时,有半自动和全自动之说,之前我看那期视频里面没讲过全自动,我就自己再那敲Dem ...

  6. Mac下IDE无法读取环境变量问题

    今天遇到一个问题,Idea无法读取~/.bash_profile下的配置文件. 上网查了好久,都说是launchctl的问题. 但是其实我这边是因为安装了zsh,导致环境标量失效. 在~/.zshrc ...

  7. 利用django-simple-captcha生成验证码

    参考文档 http://django-simple-captcha.readthedocs.io/en/latest/ django支持1.7+ 1.安装 pip install django-sim ...

  8. POJ 2719

    #include<iostream> #include<stdio.h> using namespace std; ]; int _pow(int m,int n); int ...

  9. oracle expdp impdp 导入导出备份

    数据库导入导出: 使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORA ...

  10. github 最新项目快报

    http://www.open-open.com/github/view/github2016-10-17.html