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 函数调用约定 创建一个栈帧的最重要步骤是主调函数如何向栈中传递函数参数.主调函数必须精确存储这些参数,以便被调函数能够访问到它们.函数通过选择特定的调用约定,来表明其希望以特定方式接收参数.此外, ...
随机推荐
- phyon tensorflow 安装(centos)
1.phyon27 安装 1.1 下载 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz 1.2 解压 tar -zxv ...
- Java,C 位移运算符 有符号右移>>与无符号右移>>>
个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...
- PHP OOP
<?php //1. Class and object /* object-oriented concept an object can be almost any items or conce ...
- HTML5创建高德地图
创建高德地图 功能真的很好很强大,有图有证据! 1.申请key值 去官网2.https://webapi.amap.com/maps?v=1.4.11&key=e22196035aaa10db ...
- LaTeX技巧001:LaTeX中输入大小写罗马数字
\uppercase\expandafter{\romannumeral20} \romannumeral20 前者将输入大写罗马数字20, 后者将输入小写罗马数字20.
- 今天才知道a标签的href="#"是回到页面顶部
如题,真的是,做了一年多的开发,今天才知道a标签的href="#"是回到顶部.以前一直以为这是个多么了不起的功能. 顺便扩展一下滑动隐藏和显示按钮(从别处拷贝来的代码) $( do ...
- 最短路-A - 畅通工程续
A - 畅通工程续 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这 ...
- ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling发表于:2018 ...
- C#依赖注入 简体demo
class Program { static void Main(string[] args) { Dal dal = new MySql(); dal.Add(); Dal dal1 = new ...
- php中的require和include区别
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require 1.require 的使用方法如 require("MyRequireFile.p ...