go int 转char_GO语言实现 一 栈和队列

线性表中,栈和队列是非常重要的两种数据结构,本文将就这两种数据结构进行 golang语言实现

参考:go语言中文文档:www.topgoer.com

转自:https://www.jianshu.com/p/e8de9ac93cbc

一.栈的实现

我们需要实现如下几个方法

  1. push() 向栈中压入一个元素
  2. pop() 从栈顶取出一个元素
  3. isEmpty() 判断栈是否为空
  4. length() 获取栈中元素的数目
  5. peer() 查询栈顶元素

我们需要注意 peer() 方法并不会将栈顶元素删除

数组实现如下:

type stack struct {    cache []int}func (sk *stack) push(n int) {    sk.cache = append(sk.cache, n)}func (sk stack) length() int {    return len(sk.cache)}func (sk *stack) pop() int {    if sk.length() == 0 {        return 0    }    item := sk.cache[sk.length()-1]    sk.cache = sk.cache[:len(sk.cache)-1]    return item}func (sk stack) isEmpty() bool {    return len(sk.cache) == 0}func (sk stack) peer() int {    return sk.cache[sk.length()-1]}

接下来,我们将用链表实现以下项目,并使用 interface{} 来代替 int实现多种类型的兼容

type stackLink struct {    Top    *node    Length int}type node struct {    Val  interface{}    Prev *node}func (sl *stackLink) push(value interface{}) {    newNode := &node{        Val:  value,        Prev: sl.Top}    sl.Top = newNode    sl.Length++}func (sl *stackLink) pop() interface{} {    topNodeVal := sl.Top.Val    sl.Top = sl.Top.Prev    sl.Length--    return topNodeVal}func (sl stackLink) length() int {    return sl.Length}func (sl stackLink) isEmpty() bool {    return sl.Length == 0}func (sl stackLink) peer() interface{} {    return sl.Top.Val}

由于任何的变量都实现了空接口,所以我们可以通过传递空接口来实现在栈中压入不同元素的目的

二.队列实现

同样,我们对于队列,实现了如下方法:

  1. enqueue() 入队列
  2. dequeue() 出队列
  3. isEmpty() 判断队列是否为空
  4. getLength() 获队列的长度

链表实现方式如下:

type queue struct {    First *node    Last  *node    Len   int}type node struct {    Val  interface{}    Next *node    Pre  *node}func (qu *queue) enqueue(data interface{}) {    nNode := &node{        Val:  data,        Pre:  qu.First,        Next: nil}    if qu.First == nil {        qu.First = nNode    } else {        qu.First.Next = nNode        qu.First = nNode    }    if qu.Last == nil {        qu.Last = nNode    }    qu.Len++}func (qu *queue) dequeue() interface{} {    if qu.Len > 0 {        nNode := qu.Last.Val        if qu.Last.Next != nil {            qu.Last.Next.Pre = nil        }        qu.Last = qu.Last.Next        qu.Len--        return nNode    }    return errors.New("error")}func (qu queue) isEmpty() bool {    return qu.Len <= 0}func (qu queue) getLength() int {    return qu.Len}

三.栈和队列的应用

在这一部分,我们通过栈来实现表达式的计算
例如:我们需要计算 (1+((2+3)*(4*5)))

我们维护两个栈,一个是值栈,一个是操作栈,我们在读取表达式的时候采取如下的策略:

  1. 如果遇到 '(',我们将忽略它
  2. 如果遇到数字,将其压入值栈
  3. 如果遇到操作符,将其压入操作栈
  4. 如果遇到 ')',我们从值栈中取出两个值 n1和 n2,在操作栈中,我们取出一个操作符 op
  5. 我们进行 n2 op n1的操作(例如 n1 = 3,n2 = 9,op = '/',我们将执行 9/3 )
  6. 将所得的结果压入值栈
func stackCompute(str string) int {    var (        vsk  stackLink        opsk stackLink    )    for _, v := range str {        if v <= '9' && v >= '0' {            vsk.push(int(v) - '0')        } else if v == '+' || v == '-' || v == '*' || v == '/' {            opsk.push(int(v))        } else if v == ')' {            n1 := vsk.pop().(int)            n2 := vsk.pop().(int)            op := opsk.pop().(int)            var ans int            switch op {            case '+':                ans = n2 + n1            case '-':                ans = n2 - n1            case '*':                ans = n2 * n1            case '/':                ans = n2 / n1            }            vsk.push(int(ans))        }    }    for !opsk.isEmpty() {        n1 := vsk.pop().(int)        n2 := vsk.pop().(int)        op := opsk.pop().(int)        var ans int        switch op {        case '+':            ans = n2 + n1        case '-':            ans = n2 - n1        case '*':            ans = n2 * n1        case '/':            ans = n2 / n1        }        vsk.push(int(ans))    }    char := vsk.pop().(int)    return int(char)}

我们如下调用

stackCompute("(1+((2+3)*(4*5)))")将会得到结果 101

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter7-13_Dialogue State Tracking (as Question Answering)

文章目录1 什么是Dialogue State Tracking2 数据集3 两个挑战4 经典模型本文为李弘毅老师【Dialogue State Tracking (as Question Answering)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PP…

Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)

Migrate 操作的作用是将 instance 从当前的计算节点迁移到其他节点上。 Migrate 不要求源和目标节点必须共享存储&#xff0c;当然共享存储也是可以的。 Migrate 前必须满足一个条件&#xff1a;计算节点间需要配置 nova 用户无密码访问。 下面是 Migrate instance 的流程图 …

十四、PHP框架Laravel学习笔记——构造器的排序分组、子查询

一&#xff0e;排序分组 使用 whereColumn()方法实现两个字段相等的查询结果&#xff1b; //判断两个相等的字段&#xff0c;同样支持 orWhereColumn() //支持符号create_time,>, update_time //支持符号支持数组多个字段格式[create_time,>, update_time] $users …

python找不到文件怎么办_python open找不到文件怎么办?

推荐教程&#xff1a;《python视频教程》 python open找不到文件怎么办&#xff1f; python open找不到文件的解决办法&#xff1a; 在python和很多程序语言中"\"转义符号&#xff0c;要想输出\有两种方法&#xff0c;一是多加一个\写成\\ ,一是在字符串前加一个r,提…

css:蓝环章鱼

css&#xff1a;蓝环章鱼 许多海洋生物色彩艳丽&#xff0c;这次用css仿制一下蓝环章鱼的蓝环 <script type"text/javascript" src"http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script> <script type"text/javascript&quo…

论文阅读 - Jukebox: A Generative Model for Music

文章目录1 概述2 什么是VQ-VAE2.1 Auto-encoder(AE)2.2 Variational AutoEncoder(VAE)2.3 Vector-Quantized Variational AutoEncoder(VQ-VAE)2.4 VQ-VAE-23 Music VQ-VAE4 Prior and upsamplers5 Lyrics Conditioning参考文献By learning to produce the data, we can learn t…

十五、PHP框架Laravel学习笔记——构造器的 join 查询

一&#xff0e;join 查询 使用 join 实现内联接的多表查询&#xff0c;比如三张表进行 inner join 查询&#xff1b; $users DB::table(users) ->join(books, users.id, , books.user_id) ->join(profiles, users.id, , profiles.user_id) ->select(users.id, user…

MySql5.7.12设置log-bin

什么是binlog日志 binlog日志记录了MySql数据库的增加、删除、修改操作。用来实现MySql主从复制。 设置binlog日志 在my.cnf中配置binlog日志 [mysqld] log-bin/var/lib/mysql/logs/mysql-bin  # 开启并且设定日志文件前缀&#xff0c;必须执行 server-id81  # 指定服务器i…

python一键清屏_python添加清屏功能

创建文件ClearWindow添加内容 class ClearWindow: menudefs [ (options, [None, (Clear Shell Window, <>), ]),] def __init__(self, editwin): self.editwin editwin self.text self.editwin.text self.text.bind("<>", self.clear_window) def cle…

论文阅读 - Group Normalization

文章目录1 概述2 几种normalization的方法2.1 Batch Norm2.2 Layer Norm2.3 Instance Norm2.4 Group Norm3 效果对比参考文献1 概述 Group Nomralization的提出是为了解决一张GPU上能容纳的batch_size很小&#xff0c;导致模型训练效果显著变差的问题。随着深度学习的快速发展…

十六、PHP框架Laravel学习笔记——构造器的增删改

一&#xff0e;增删改操作 使用 insert()方法可以新增一条或多条记录&#xff1b; //新增一条记录 DB::table(users)->insert([ username > 李白, password > 123456, email > libai163.com, details > 123 ]); //新增多条记录 DB::table(users)->insert…

git如何切换分支_拜托,不要再问我Git分支如何使用

今天来讲讲我使用Git分支的一些经验&#xff0c;记录一下&#xff0c;希望对大家有帮助。阐述在平常开发中&#xff0c;一般都会对应三种环境&#xff0c;本地环境、测试环境、线上环境。开发的基本流程都是先在本地环境开发好,再把代码发布到测试环境测试&#xff0c;最后再发…

搞懂HMM

文章目录1 概述2 符号说明3 两点假设4 Evaluation4.1 前向算法&#xff08;forward algorithm&#xff09;4.2 后向算法&#xff08;backward algorithm&#xff09;5 Learning6 Decoding参考资料1 概述 本文是B站上机器学习-白板推导系列(十四)-隐马尔可夫模型HMM的学习笔记&…

书店售书最低价格问题

书店针对《哈利波特》系列书籍进行促销活动&#xff0c;一共5卷&#xff0c;用编号0、1、2、3、4表示&#xff0c;单独一卷售价8元&#xff0c; 具体折扣如下所示&#xff1a;本数 折扣 2 5% 3 10% 4 …

十七、PHP框架Laravel学习笔记——模型的定义

一&#xff0e;默认设置 框架可以使用 Eloquent ORM 进行数据库交互&#xff0c;也就是关系对象模型&#xff1b; 在数据库入门阶段&#xff0c;我们已经创建了一个 User.php 模型&#xff0c;如下&#xff1a; php artisan make:model Http/Models/User //默认在 app 目录 …

centos 启动一个redis_基于prometheus+grafana体系监控redis缓存服务

概述前面已经介绍了怎么用prometheus监控mysql数据库&#xff0c;今天主要分享下怎么去监控redis服务。由于没有redis环境&#xff0c;所以用docker模拟了一下。一、Docker部署1、下载sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.…

十八、PHP框架Laravel学习笔记——模型的增删改

一&#xff0e;增删改操作 新增方法如下&#xff0c;注意&#xff1a;默认模型接管 created_at 和 updated_at&#xff1b; $users new User(); $users->username 辉夜; $users->password 123; $users->email huiye163.com; $users->details 123; $use…

[Codeforces673A]Bear and Game(水题,思路)

题目链接&#xff1a;http://codeforces.com/contest/673/problem/A 题意&#xff1a;一个人看一个90分钟的节目&#xff0c;然后告诉你一些有趣的时刻。这个人假如在15分钟内还没有看到有趣的时刻&#xff0c;那他就关电视。问这个人能看多长时间的电视。 记下两两节目的时间差…

搞懂语音去噪

文章目录1 概述2 传统语音去噪2.1 谱减法2.2 维纳滤波法3 深度语音去噪参考资料1 概述 语音去噪(noise reduction)又被称为语音增强(speech enhancement)&#xff0c;主要是针对于有人声的音频进行处理&#xff0c;目的是去除那些背景噪声&#xff0c;增强音频中人声的可懂性(…

软件架构设计案例_透过现象看本质:常见的前端架构风格和案例

所谓软件架构风格&#xff0c;是指描述某个特定应用领域中系统组织方式的惯用模式。架构风格定义一个词汇表和一组约束&#xff0c;词汇表中包含一些组件及连接器&#xff0c;约束则指出系统如何将构建和连接器组合起来。软件架构风格反映了领域中众多系统所共有的结构和语义特…