不关注我们?那你会错过很多干货哦!

十大数据结构之一——堆栈

堆栈是一种常见的数据结构模型,也是学习编程的路上,必学的一门知识,我们经常使用的C/C++程序就涉及到了很多堆栈的概念,局部变量、申请的内存等,都是以堆栈结构存放的。

堆栈结构怎么理解呢?堆栈用一句话来表达就是:“先进后出,后进先出”,打个比方,堆栈是一个长方形的箱子,并且它只有一个出口(上面有一个标志),而现在我们要把一个与出口形状相同的方块放进箱子里,这个长方形箱子放满了5个方块,现在怎么把5个方块拿出来呢?答案是:“从出口一个一个往外拿”,而这个放方块和去方块的过程,就是堆栈存放和取出数据的过程。

长方形就相当于堆栈,出口相当于栈顶,箱底相当于栈底,放方块相当于入栈,取方块相当于出栈或退栈,出口上的标志相当于栈顶指示器

打比方归打比方,在数据处理中,堆栈长度并不是像“箱子”的容积那样是不变的,而是会根据需求做出改变。堆栈是数据元素和数据元素之间的逻辑关系,并不是一种特定的“代码表现形式”,不是说代码要写成这样,或者那样,而是要利用代码实现这种数据元素的逻辑关系。下面为大家举一个例子↓

开始上手!

我们现在用C语言实现堆栈结构的使用,堆栈分为两种,一种是顺序堆栈,一种是链式堆栈,我们今天就先讲一个顺序堆栈,链式堆栈在下一篇文章中发布。

顺序堆栈相当于一个特殊的数组

链式堆栈

要使用堆栈,我们需要创建4个函数,分别是:堆栈初始化、检查堆栈是否为空、入栈、出栈。我们用数组(按顺序增长)的形式来表示堆栈,这个堆栈可以储存10个数据(4字节),并且带有一个栈顶指示器,所以我们要定义一个结构体,如下图所示↓

初始化

在这之后,我们要创建“堆栈初始化”——initialize()函数,初始化特别简单,这里小编就简单的示范一下就可以了,将堆栈里面的每一个成员都初始化为-858993460,并将栈顶指示器初始化为9,这里我们需要使用一个循环。

检查堆栈是否为空

在这我们使用循环语句,逐个检测堆栈里的每一个数据,栈底为-858993460初始化的值)并且栈顶指示器为9(无数据)就说明该堆栈为空。由于该功能过于简单,所以小编将实现这个功能的代码块整合到了出栈函数中。

出栈

出栈之前我们先检测一下该栈是否为空,这就用到了上一步所说的功能,检测完之后就开始从栈顶取出元素了,按照我们入栈的方式,最开始的栈顶位于S->numbe[9]的位置,所以我们第一次出栈得到的数值是9,在取出这个数值之后,原先的S->numbe[9]会被初始化,然后栈顶指示器+1。如下图所示↓

有些人可能会问,为什么有些人的栈顶指示器是-1,而你的是+1呢?因为,栈顶指示器只起到只是栈顶的作用,实际的值由你来决定,它甚至可以用字符表示。

入栈

入栈的第一步先判断,堆栈是否已经满了,如果没有满,则进行下一步操作,入栈这里,我们的栈顶指示器会-1,这个与出栈是相反的。

这四个函数写完了,接下来就是在主函数中使用他们了,具体的步骤可以在源码中看到。在这里说一下,这种方法创建的堆栈实用性不高,因为它的长度是固定,并且这种以数组形式实现的堆栈比较浪费资源,内存就是一个例子。

那怎么才能解决这个问题呢?我们不妨来试一试链式堆栈,在下一篇文章,《一碳科技》将让大家学会链式堆栈这一知识点。

粉丝留言可以获取堆栈学习源码,提示一下:关注可以成为粉丝哦!

查看原文 >>
相关文章