IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Golang数据结构实现(一)栈 -> 正文阅读

[数据结构与算法]Golang数据结构实现(一)栈

1. 基于切片的实现

package main

import (
	"fmt"
)

var stackArray []interface{} //创建一个接口类型的切片 可以保存任何类型的元素
var a []int

func push(x interface{}) {
	stackArray = append(stackArray, x) //加入x
}
func pop() interface{} {
	sz := len(stackArray)          //获取栈大小
	ele := stackArray[sz-1]        //最后1个元素是栈顶元素   [0-n-1]--[栈底-栈顶]
	stackArray = stackArray[:sz-1] //删除最后一个元素(栈顶元素)
	return ele
}
func peek() interface{} {
	return stackArray[length()-1] //返回栈顶元素
}
func length() int {
	return len(stackArray)
}
func isEmpty() bool {
	return length() == 0
}
func main() {
	push(1)
	push(2)
	push(3)
	fmt.Println(stackArray)
	fmt.Println(pop())
	fmt.Println(peek())
	push("hello")
	push(3.14)
	fmt.Println(peek())
	fmt.Println(pop())
	fmt.Println(peek())

}

2. 基于链表的实现

package main

import (
	"fmt"
)

type Node struct {
	Val  interface{}
	Next *Node
}
type Stack struct {
	top *Node
	sz  int
}

func (st *Stack) push(x interface{}) {
	newNode := &Node{} //创建一个新节点
	newNode.Val = x
	newNode.Next = st.top
	st.top = newNode //栈顶指针指向新节点
	st.sz++
}
func (st *Stack) pop() interface{} {
	ele := st.top.Val
	st.top = st.top.Next
	st.sz--
	return ele
}
func (st *Stack) peek() interface{} {
	ele := st.top.Val
	return ele
}
func (st *Stack) size() int {
	return st.sz
}
func (st *Stack) isEmpty() bool {
	return st.size() == 0
}
func (st *Stack) show() {

	for cur := st.top; cur != nil; cur = cur.Next {
		fmt.Print(cur.Val)
		if cur.Next != nil {
			fmt.Print("<-")
		}
	}
	fmt.Println()
}
func main() {
	st := &Stack{}
	st.push("aaa")
	st.push("bbb")
	st.push("ccc") //  "ccc"->"bbb"->"aaa"  "ccc"是栈顶元素 相当于push时是链表的头插法
	st.show()
	fmt.Println(st.size())
	fmt.Println(st.pop())
	fmt.Println(st.pop())
	fmt.Println(st.size())
	fmt.Println(st.pop())
	fmt.Println(st.isEmpty())

}
/*ccc<-bbb<-aaa
3
ccc
bbb
1
aaa
true
*/
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:20:57  更:2022-05-08 08:21:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:20:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码