ARTS 第11周

2019-06-17  本文已影响0人  陈卧虫

ARTS 第11周分享

[TOC]

Algorithm

发现自己的算法能力太差了,打算从最基础的数据结构学习算法,将自己的基础给打扎实,

实现一个单项循环队列

[思路]

  1. 一个队列包含有前节点,指向第一个元素;尾节点,指向最后一个元素;最大尺寸,记录能够存储的最大元素数量;以及一个数组用来存储实际的数据(在golang中更适合用slice实现)
  2. 初始头和尾指针都指向下标为0的元素
  3. 通过预留一个空位来区别空队列与满队列,否则将很难区分二者
    1. 空:rear = front
    2. 满:(rear+1+ maxSize - front)% maxSize == 0

[参考代码]

type singleCircleArray struct {
    maxSize int
    front   int
    rear    int
    myArray []int
}

func (s *singleCircleArray) addItem(item int) (err error) {

    if s.isFull() {
        fmt.Print("full Array/t")
        return errors.New("full Array")
    }
    s.myArray[s.rear] = item
    fmt.Println("addItem: ", s.myArray)
    s.rear = (s.rear + 1) % s.maxSize
    return
}

func (s *singleCircleArray) isFull() bool {
    return (s.rear+1-s.front+s.maxSize)%s.maxSize == 0
}

func (s *singleCircleArray) isNull() bool {
    return s.rear == s.front
}

func (s *singleCircleArray) getItem() (item int, err error) {
    if s.isNull() {
        return 0, errors.New("empty Array")
    }
    item = s.myArray[s.front]
    s.myArray[s.front] = 0
    s.front = (s.front + 1) % s.maxSize
    return
}

func (s *singleCircleArray) head() (item int, err error) {
    if s.isNull() {
        return 0, errors.New("empty Array")
    }
    fmt.Println(s.myArray[s.front])
    return s.myArray[s.front], err
}

func (s *singleCircleArray) list() {
    if s.isNull() {
        fmt.Println("empty Array")
        return
    }
    temp := s.front
    for {
        fmt.Printf("%d\t", s.myArray[temp])
        temp = (temp + 1) % s.maxSize
        if s.rear == temp {
            break
        }
    }
}

Review

Tips

git diff 的常用用法

share

Go语言实战笔记(十八)| Go log 日志: https://www.flysnow.org/2017/05/06/go-in-action-go-log.html

  1. golang 提供了log包,来追踪日志的记录

    1. 与fmt包很相似,但是输出默认带时间戳
  2. log包提供了可定制化的日志抬头信息

    1. 通过log.SetFlags 进行设置

    2. 可定义的常量选项

const (     
    Ldate = 1 << iota           //日期示例: 2009/01/23  
    Ltime                       //时间示例: 01:23:23    
    Lmicroseconds          //毫秒示例: 01:23:23.123123. 
    Llongfile            //绝对路径和行号: /a/b/c/d.go:23 
    Lshortfile              //文件和行号: d.go:23.   
    LUTC                    //日期时间转为0时区的    
    LstdFlags     = Ldate | Ltime //Go提供的标准抬头信息 
)
第二周:1, 2, 3, 4, 5, 6, 7
为什么计算机只认识0和1?https://mp.weixin.qq.com/s/9ePjft6QleS8pRz9AoXlmA
罗胖60秒:什么是最好的时间管理?https://mp.weixin.qq.com/s/o7fn1-ITovRHMyGUcWohoA
沉浸在你尊重的事儿里面,比如读书,健身, 学习。

Go2错误处理提案:try还是check?https://mp.weixin.qq.com/s/fpTM4zXCmGe2c03LhNbFRw
时区的关系:https://mp.weixin.qq.com/s/sgtPyXJxs5-Rh5OorFz8bw
由于地球自转,导致不同经度的地方时间有不同,即东边比西边早看到太阳
时区:地球表面按经度:自东向西划成一个个区域,并且规定每个区域相差一个小时
跨时区时,向东加1小时,向西减1小时
中国时间:GMT + 8 (也就是所谓的东八区)
GMT: Greenwich Mean Time 格林威治时间,英国xxx天文台平太阳时间为0点
罗胖60秒:为什么“目的性强”的人招人讨厌?https://mp.weixin.qq.com/s/_m2bQVgTVSLN8dhxuT0MEw
讨厌的原因不是目的性强,而是目标太狭窄
比如挣钱,如果还有一个原因,哪怕是为了让孩子上更好的大学,就不会觉得你目的性强
生存策略:把自己多层次的,丰富的目标主动暴露出来给别人看
刘润:如何赢得一场辩论?https://mp.weixin.qq.com/s/TPIU40vRXOzx5061AcH6lQ  // good

Go之父说:不懂浮点数不配当码农…https://mp.weixin.qq.com/s/0lCte3UD5qYcaBnebwnYrQ

不懂这12个语法糖,别说你会Java!https://mp.weixin.qq.com/s/wIQAXFe208n0OVlX4tbKzg
高性能 Go 服务的内存优化(译):https://mp.weixin.qq.com/s/kfcuG1gbQLBY8HsAC92P9g

Git diff 常见用法: https://www.cnblogs.com/qianqiannian/p/6010219.html
Go 语言日志指南: https://linux.cn/article-8543-1.html
Go语言实战笔记(十八)| Go log 日志:  https://www.flysnow.org/2017/05/06/go-in-action-go-log.html

Golang 优化之路——自己造一个日志轮子: https://blog.cyeam.com/golang/2017/07/14/go-log
Golang struct、interface 类型详解: https://www.jianshu.com/p/d87c69ac6ce7
golang的struct里面嵌入interface: https://www.jianshu.com/p/a5bc8add7c6e

字符串匹配的KMP算法: https://mp.weixin.qq.com/s/JeKZGc7MzSaaEl3nehi0pg
https://golangbot.com/pointers/
上一篇下一篇

猜你喜欢

热点阅读