数据结构与算法-栈
栈就是先进后出、后进先出的数据结构,也是一种表。在实际的项目中我们也经常碰到这种栈的算法,比如java中方法的调用,利用栈的先进后出、后进先出的特性。为每个调用的线程创建一个方法栈,执行一个方法我们称为栈帧,方法的调用顺序也就是依次将栈帧压入方法栈。当方法执行完毕也就是一个弹出栈操作能够正确的返回到指定的地址。
栈的操作一般有栈初始化、判断是否为空、判断栈的大小、入栈、出栈、遍历栈元素等。下面是基于golang实现的一个栈代码样例:
package stack import ( "fmt" ) // 栈 golang 实现 type Element interface{} type Stack struct { Element Element Next *Stack } // 判断栈是否为空 func IsEmpty(s *Stack) bool { return s.Next == nil } // 创建一个栈 func CreateStack() *Stack { return &Stack{} } // 打印 栈信息 func DisposeStack(s *Stack) { if IsEmpty(s) { return } p := s for p.Next != nil { fmt.Println("result = ", p.Element) p = p.Next } } // 置空栈 func MakeEmpty(s *Stack) { s.Next = nil } // 入栈 func Push(s *Stack, e Element) { p := &Stack{} p.Element = e p.Next = nil if IsEmpty(s) { s.Next = p } else { q := p.Next p.Next = q s.Next = p } } // 出栈操作 func Pop(s *Stack) Element { if IsEmpty(s) { return nil } else { p := s.Next if p.Next == nil { s.Next = nil } else { q := p.Next s.Next = q } return p.Element } } // 获取栈顶元素 func Top(s *Stack) Element { if IsEmpty(s) { return nil } else { return s.Next.Element } } // 获取大小 func Size(s *Stack) int { if IsEmpty(s) { return 0 } else { var size int p := s for p.Next != nil { size++ p = p.Next } return size } }
相关推荐
Educoder题目:数据结构与算法 - 栈答案解析.md
数据结构与算法--栈&队列 很好的哦 欢迎下载
算法-数据结构和算法-4-栈和队列.rar
算法与数据结构:5-栈和队列2.pdf
数据结构章节--栈。程序主要功能是实现各种类型表达式的计算。类C语言编程...
全书分16章,1概论,2算法分析 3渐进表示法 4基本数据结构,5数据类型与抽象 6栈与队列 7有序线性表与排序表 8 散列,哈希表与分散表 9树 10查找树, 11堆和优先队列 12集合,多重集和分区 13动态存储分配 14 算法...
数据结构与算法----线性表及Java实现顺序表、链表、栈、队列 定义线性表节点的结构.pdf
数据结构-基本算法-顺序栈(学生时代源码,调试可运行)
算法与数据结构:6-栈和队列3.pdf
算法与数据结构:4-栈和队列1.pdf
这是C#版的数据结构与算法的代码实现,包括:顺序表,单链表,双链表;顺序栈,链栈;顺序队列,链队列;顺序串;用数组进行特殊矩阵的存储,稀疏矩阵的存储;顺序存储二叉树,链式存储二叉树,哈夫曼树;多重链表...
数据结构与算法——顺序栈及基本操作(包含入栈和出栈)
1)数据结构的基本概念 2)线性表、栈与队列的定义,存储表示 3)树和二叉树的定义、二叉树的遍历 4)图的定义、存储结构、图的遍历 5)排序与查找
《数据结构与算法》实验报告 特殊线性表算法实践-栈
数据结构C++版--栈的实现及基本操作 程序代码是自己写的,但算法及思想都来源于网上……
实现基于顺序表的顺序栈(数据结构定义+基本运算) 设计算法判断一个算术表达式的圆括号是否正确配对。 第一个式子: 1*(2+3*(4*(2-1)*(3+x)+5)-6) 能够正确匹配 第二个式子: 1*(2+3*4*(2-1)*(3+x)+5)-6) 不...