`
qq466862016
  • 浏览: 128192 次
  • 来自: 杭州
社区版块
存档分类
最新评论

数据结构与算法-栈

阅读更多

数据结构与算法-栈

            栈就是先进后出、后进先出的数据结构,也是一种表。在实际的项目中我们也经常碰到这种栈的算法,比如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

    Educoder题目:数据结构与算法 - 栈答案解析.md

    数据结构和算法-思维导图.pdf

    以上是根据文件的标题、描述、标签和部分预览内容总结出的数据结构与算法知识点。这些知识点是IT行业中软件开发人员必备的基础知识,广泛应用于软件设计、算法实现、系统优化等众多领域。掌握这些知识点能够帮助IT...

    数据结构与算法-PPT课件

    数据结构与算法是计算机科学中的核心课程,它探讨如何有效地组织和处理数据,以及如何设计和分析解决问题的算法。这份“数据结构与算法-PPT课件”提供了丰富的学习材料,涵盖了多个关键主题。 首先,我们要了解数据...

    算法-数据结构和算法-4-栈和队列.rar

    本资源“算法-数据结构和算法-4-栈和队列.rar”聚焦于两种基本但极其实用的数据结构——栈和队列,这两种结构在编程中有着广泛的应用。 栈(Stack)是一种线性数据结构,遵循“后进先出”(Last In First Out,简称...

    数据结构与算法--Java语言描述

    数据结构与算法是计算机科学的基础,对于任何编程语言来说,理解和掌握它们都是至关重要的,特别是对于Java语言。在这个“数据结构与算法--Java语言描述”的资料中,我们有望深入理解这些核心概念,并通过Java语言来...

    西安电子科技大学-数据结构与算法-期末知识点总结.pdf

    "西安电子科技大学-数据结构与算法-期末知识点...本资源涵盖了数据结构与算法的基本概念、线性表、栈与队列、树与二叉树、图、查找算法和排序算法等方面的知识点,对于学习数据结构与算法的学生具有重要的参考价值。

    hello-algo-数据结构与算法-zh-csharp.pdf

    本书的内容涵盖了数据结构与算法的基础知识,包括数组、链表、栈、队列、树、图等数据结构,以及排序、查找、图形遍历等算法。书中还提供了大量的编程实践和习题,帮助读者更好地掌握数据结构与算法的知识。 本书的...

    数据结构与算法-面向对象的C++设计模式

    知识点涵盖了从基础的数据结构(如数组、链表、栈、队列)到更高级的概念(如设计模式、算法的渐近分析),还包括了如何将这些理论应用到实际编程实践中。通过本文件提供的内容,读者可以深入了解数据结构与算法的...

    数据结构与算法--面向对象的C++设计

    本书标题为《数据结构与算法——面向对象的C++设计》,其内容主要围绕数据结构和算法在C++中的面向对象设计模式展开。本书不仅介绍了数据结构与算法的基本概念,还着重强调了面向对象编程范式(Object-Oriented ...

    数据结构与算法---C++版(Adam Drozdek)书中的源代码

    《数据结构与算法---C++版》是由Adam Drozdek编著的一本经典教材,它深入浅出地讲解了数据结构和算法的核心概念,并通过C++语言进行了实现。这本书不仅适合初学者,也对有一定经验的程序员有很高的参考价值。在...

    数据结构与算法分析--C语言描述_数据结构与算法_

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C语言因其高效、底层特性,常被用于实现数据结构和算法,使得程序更接近硬件,性能更优。本资源"数据结构与算法分析--C语言描述"是针对数据...

    数据结构与算法-C语言版本

    数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C语言因其高效、底层特性,常被用于实现数据结构和算法。本资料包“数据结构与算法-C语言版本”聚焦于通过源码实例和答案解析,帮助学习者...

    数据结构与算法-----PPT版本

    数据结构与算法是计算机科学的基础,对于任何编程学习者来说,理解和掌握它们至关重要。这个“数据结构与算法-----PPT版本”很可能包含了徐旭松教授或专家精心制作的一系列教学材料,旨在帮助学习者深入理解这些核心...

    算法大全-面试题-链表-栈-二叉树-数据结构

    "算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和应用这些核心概念。 链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由一...

    数据结构和算法-Flash动画演示

    4. **栈与队列**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等。队列则是先进先出(FIFO)的,常见应用包括任务调度和打印机队列。这两种数据结构是许多算法和数据处理的基础。 5. **树**:...

    数据结构与算法----面向对象的C++模式

    全书分16章,1概论,2算法分析 3渐进表示法 4基本数据结构,5数据类型与抽象 6栈与队列 7有序线性表与排序表 8 散列,哈希表与分散表 9树 10查找树, 11堆和优先队列 12集合,多重集和分区 13动态存储分配 14 算法...

    Java数据结构和算法-带书签目录扫描版

    《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...

    数据结构课程设计--栈的应用

    在计算机科学中,数据结构是组织、存储和处理数据的方式,它是算法设计的基础。栈是一种特殊的数据结构,遵循“后进先出”(LIFO)原则,即最后存入的元素最先被取出。本课程设计的重点是探讨栈在解决实际问题,特别...

Global site tag (gtag.js) - Google Analytics