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 函数调用约定 创建一个栈帧的最重要步骤是主调函数如何向栈中传递函数参数.主调函数必须精确存储这些参数,以便被调函数能够访问到它们.函数通过选择特定的调用约定,来表明其希望以特定方式接收参数.此外, ... 
随机推荐
- Apache Flink 任意 Jar 包上传致 RCE 漏洞复现
			0x00 简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布.数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任 ... 
- Quartz.NET - 教程 4: 更多关于触发器
			译者注: 目录在这 [译]Quartz.NET 3.x 教程 译者注: 原文在这 Lesson 4: More About Triggers 跟作业一样, 触发器也相当容易使用, 但确实包含各种可定制 ... 
- sql查询如何将A表数据name字段对应B表name字段得到对应的B表id主键然后添加A到表usel_id中
			1.写这个的原因 最近在写公司项目的时候一个功能很是让我头疼如标题看到的一样,平时我们一般都只负责数据表的查询或者连表查询某一个字段和A表字段一起显示出来. 但是添加到A表还是头一次,第一天想了很久都 ... 
- IO流学习之字符流(三)
			IO流之字符流缓冲区: 概念: 流中的缓冲区:是先把程序需要操作的数据保存在内存中,然后我们的程序读写数据的时候,不直接和持久设备之间交互,而改成和内存中的数据进行交互. 缓冲区:它就是临时存储数据, ... 
- 代数式转换为c语言表达式(很简单)
- go append 函数常见操作
			1. 将切片 b 的元素追加到切片 a 之后: a = append(a, b...) 2. 复制切片 a 的元素到新的切片 b 上: 1. b = make([]T, len(a)) 2. copy ... 
- Java体系结构
			java程序运行过程图 文章中内容大多来自该处Java虚拟机规范----JVM体系结构 - Java初级码农 - 博客园 JDK体系 JDK体系结构图 JDK.JRE.JVM之间的关系 JDK:Jav ... 
- 用友UAP NC 单据新增数据时抛出"流程平台缓存中不存在该单据或交易类型=HB06"
			正常单据新增时,抛出异常"流程平台缓存中不存在该单据或交易类型=HB06" 
- WPF 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
			该问题出现在WPF中的VM类中,ObservableCollection类型,该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改, ... 
- 虚拟机floppy0
			网上搜索方法是:删除该虚拟机的软盘即可. 具体原因还不知道,以后再补上原因 
