- slice(切片):底层数据结构是数组
- stack(栈):一种先进后出的数据结构
普通版的模拟写入和读取的栈
package main import "fmt" //栈的特点是先进后出
//使用一个切片的全局变量来模拟栈
var stack []int //向栈中添加数据
func push(value int) {
stack = append(stack, value)
} //从栈中获取数据
func pop() (int, bool) {
ok := false
value :=
if len(stack) > {
value = stack[len(stack)-]
stack = stack[:len(stack)-]
ok = true
return value, ok
} else {
return value, ok
}
} func main() {
//向栈中添加数据
for i := ; i < ; i++ {
push(i)
fmt.Println(stack)
}
//从栈中获取数据
for {
v, ok := pop()
if ok {
fmt.Println(v)
} else {
break
}
}
}
使用goroutine来异步读取栈中数据或往栈中写入数据
package main import (
"fmt"
) //栈的特点是先进后出
//使用一个切片的全局变量来模拟栈
var stack1 []int //此通道用于通知主协程已经完成操作了
//但是此操作有可能不会输出全部数据
//因为添加数据和获取数据是异步的
//当获取数据的速度快于写入数据
//便不会输出全部数据
var e chan int = make(chan int) //向栈中添加数据
func push1(value int) {
stack1 = append(stack1, value)
fmt.Println(stack1)
} //从栈中获取数据
func pop1() {
for {
if len(stack1) > {
value := stack1[len(stack1)-]
stack1 = stack1[:len(stack1)-]
fmt.Println(value)
} else {
e <-
}
}
} func main() {
for i := ; i < ; i++ {
go push1(i)
} go pop1() <-e
}
输出:
[]
[1 6 5 9 3 2 7 0 4]
[1 6 5 9 3 2 7 0 4 8]
[1 6 5]
[1 6]
[1 6 5 9 3 2 7 0]
[1 6 5 9]
[1 6 5 9 3 2]
[1 6 5 9 3 2 7]
8
4
0
7
2
3
9
5
6
1
[1 6 5 9 3]
使用goroutine异步读取或者写入的时一定要注意通道的写法,很容易造成死锁
使用golang的slice来模拟栈的更多相关文章
-
ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)
本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...
-
java 16 - 5 LinkedList模拟栈数据结构的集合
请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. package cn_LinkedList; impo ...
-
hdu 4699 Editor 模拟栈
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...
-
【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
-
第一回写的用arraylist模拟栈操作
package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...
-
HDOJ/HDU 1022 Train Problem I(模拟栈)
Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...
-
c语言学习,模拟栈操作
1.stack.c模拟栈操作函数的实现 #include<stdio.h> #include<stdlib.h> ; static char *stack;//数据栈 ;//栈 ...
-
KEILC51可重入函数及模拟栈浅析
MARK:文章中的红色部分是个人的理解. KEILC51可重入函数及模拟栈浅析 关键字:keilc51,模拟堆栈,可重入函数调用,参数传递,C?XBP,C?ADDXBP 摘要:本文较详细的介绍了kei ...
-
采用LinkedList来模拟栈数据结构的集合--先进后出
三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { publi ...
随机推荐
-
Spark DAGSheduler生成Stage过程分析实验
RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...
-
centos 下测试网速
wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest. ...
-
Catch That Cow 分类: POJ 2015-06-29 19:06 10人阅读 评论(0) 收藏
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58072 Accepted: 18061 ...
-
Dynamics CRM The difference between UserId and InitiatingUserId in Plugin
对于这两者的不同,MSDN的解释如下 • IExecutionContext.UserId Property: Gets the global unique identifier of the sys ...
-
什么是javabean及其用法
一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...
-
Go语言切片
切片 Go 语言切片相当于是对数组的抽象. 由于Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比 ...
-
PS提亮户外儿童照
(@摄影师延延)作品 调整完的图. 原图. 再看原图.好吧,这张照片明显欠曝了,蘑菇酱的小脸黑黑的.但是构图啊蘑菇酱的神情啊都不错捏.好在蘑菇妈是用raw格式拍,即刻Lightroom调整无压力. 1 ...
-
Oracle部署安装
1.用户有数据库服务器则不需要安装Oracle服务器端,若没有需要安装 https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html ...
-
Mac使用pyenv安装Python出现The Python zlib extension was not compiled. Missing the zlib错误
Mac使用pyenv安装Python出现The Python zlib extension was not compiled. Missing the zlib错误 参考这里,详细如下: On Mac ...
-
不信任的 .exe 怎么办,用 Windows 沙盒啊!
简评:*,在计算机安全领域,沙盒(sandbox)是种安全机制,为执行中的程式提供的隔离环境.通常是作为一些来源不可信.具破坏力或无法判定程序意图的程序提供实验之用. 微软正在尝试解决人们对运行 ...