go 语言实现栈原理
package main
import "fmt"
type StackNode struct {
Data interface{} //数据
Next *StackNode //下一个节点
}
//创建链栈
func CreateStack(Data ...interface{}) *StackNode {
if len(Data) == 0 {
return nil
}
s := new(StackNode)
//记录下一个节点
var nextNode *StackNode = nil
for _, v := range Data { //1,2,3,4,5
//创建新节点存储数据
newNode := new(StackNode)
newNode.Data = v
s = newNode
//如果下一个节点不为空 将当前节点的下一个节点设置上一次节点
//if nextNode != nil {
s.Next = nextNode
//}
//下一个节点为当前节点
nextNode = s
}
return s
}
//打印链栈
func PrintStack(s *StackNode) {
if s == nil {
return
}
for s != nil {
fmt.Print(s.Data, " ")
s = s.Next
}
}
//链栈个数
func LengthStack(s *StackNode) int {
if s == nil {
return -1
}
//循环计算链栈个数
i := 0
for s != nil {
i++
s = s.Next
}
return i
}
//入栈
func Push(s *StackNode, Data interface{}) *StackNode {
if s == nil {
return nil
}
if Data == nil {
return s
}
//新建节点
newNode := new(StackNode)
newNode.Data = Data
newNode.Next = s
return newNode
}
//出栈
func Pop(s *StackNode) *StackNode {
if s == nil {
return nil
}
nextNode := s.Next
s.Next = nil
return nextNode
}
//清空链栈
func Clear(s *StackNode) *StackNode {
return nil
}
go 语言实现栈原理的更多相关文章
- 浅入浅出 Go 语言接口的原理
浅入浅出 Go 语言接口的原理 接口是 Go 语言的重要组成部分,它在 Go 语言中通过一组方法指定了一个对象的行为,接口 interface 的引入能够让我们在 Go 语言更好地组织并写出易于测试的 ...
- Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c#
Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c# 1. 加密算法的参数::算法/模式/填充 1 2. 标准加密api使用流程1 2.1. Md5——16bi ...
- C语言函数调用栈
C语言函数调用栈 栈溢出(stack overflow)是最常见的二进制漏洞,在介绍栈溢出之前,我们首先需要了解函数调用栈. 函数调用栈是一块连续的用来保存函数运行状态的内存区域,调用函数(calle ...
- C利用可变参数列表统计一组数的平均值,利用函数形式参数栈原理实现指针运算
//描述:利用可变参数列表统计一组数的平均值 #include <stdarg.h> #include <stdio.h> float average(int num, ... ...
- Go语言GC实现原理及源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/475 本文使用的 Go 的源码1.15.7 介绍 三色标记法 三色标 ...
- 深入 Go 语言 defer 实现原理
转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/523 本文使用的go的源码 1.15.7 介绍 defer 执行规 ...
- C语言数据结构----栈与递归
本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...
- 4-29 c语言之栈,队列,双向链表
今天学习了数据结构中栈,队列的知识 相对于单链表来说,栈和队列就是添加的方式不同,队列就相当于排队,先排队的先出来(FIFO),而栈就相当于弹夹,先压进去的子弹后出来(FILO). 首先看一下栈(St ...
- C语言函数调用栈(二)
5 函数调用约定 创建一个栈帧的最重要步骤是主调函数如何向栈中传递函数参数.主调函数必须精确存储这些参数,以便被调函数能够访问到它们.函数通过选择特定的调用约定,来表明其希望以特定方式接收参数.此外, ...
随机推荐
- maven 上传 jar 到本地私服
You'll need to add a RankLib <dependency> tag set to your existing <dependencies> list. ...
- 博客前端live2D实现
1.本来以为没那么简单,结果看了大佬的https://www.cnblogs.com/liuzhou1/p/10813828.html#4431992的简单明了.效果如下,可随鼠标移动. ①这里添加在 ...
- 【Spring】事务(transactional)之初步理解
一. 场景 有一个定时器,做数据库表数据同步. 把数据库A的表table(DB_A_TABLE)同步到数据库B的表table(DB_B_TABLE). 对于DB_A_TABLE的每行数据要做一定的逻辑 ...
- 2级搭建类201-Oracle 12cR2 单实例 ASM(OEL7.7)公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列除特定项目目前不对外发布,仅作为博客记录,其他公开.如学员在 ...
- Pikachu-File Inclusion(文件包含漏洞)
File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...
- 使用Xpath爬取酷狗TOP500的歌曲信息
使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...
- linux2.4.0源码下载地址(配合毛德操情景分析)
https://www.kernel.org/pub/linux/kernel/v2.4/
- 通过otter元数据表获取有用的信息
获取数据源相关信息 原始数据: +----+------+-------+--------------------------------------------------------------- ...
- Codeforce 25A - IQ test (唯一奇偶)
Bob is preparing to pass IQ test. The most frequent task in this test is to find out which one of th ...
- POJ2528Mayor's posters 线段树,离散化技巧
题意:一个坐标轴从1~1e7,每次覆盖一个区间(li,ri),问最后可见区间有多少个(没有被其他区间挡住的) 线段树,按倒序考虑,贴上的地方记为1,每次看(li,ri)这个区间是否全是1,全是1就说明 ...