栈,实现递归的数据结构

栈在计算机中扮演着重要的角色,它是计算机实现函数调用的基本数据结构。


文章目录

  • 1.什么是栈
  • 2.入栈
  • 3.出栈
  • 4.栈的实现
  • 5.总结

1.什么是栈

栈是一种较为特殊的数据结构,它的特点是先进后出。什么意思呢?想象你有一个跟书本一样长宽的盒子,当你依次往里面放进书本1,书本2,书本3之后,如果想要把书本1拿出来,你会发现现在你能拿出来的只有书本3。因为其他两本都被压在下面了。只有当书本3,书本2被依次取出之后,才能取出书本1。数据结构中的栈模拟的就是这样一种结构,盒子就是我们的栈,书本就是我们的数据,放书的过程叫做入栈,而取出最上面的书的过程叫做出栈

2.入栈

当一个栈被创建之后,它提供给外部的操作只有:入栈,出栈,访问栈顶这几个操作。来看看入栈的例子:

栈,实现递归的数据结构_第1张图片

每次入栈操作,除了将数据压入到栈顶之外,还会更新top指针的记录。这个top指针会一直指向栈顶。由于栈维护了一个top指针,使得我们可以在O(1)时间内完成数据入栈的操作。

3.出栈

出栈操作,每次只能弹出栈顶的元素。

栈,实现递归的数据结构_第2张图片

如果我们想要弹出元素90,只能先依次把70,80弹出,才可以把90弹出。因为这样才符合先进后出的特性。

4.栈的实现

在实现上,栈的实现可以用数组来替代。因为数组是编程语言直接支持的最简单的数据结构,可以用它作为基础,来实现其他的数据结构。

栈,实现递归的数据结构_第3张图片

从上图中可以发现,把栈横过来就变成了数组,只要按照栈的先进后出特性来访问数组,就可以根据数组来实现栈。入栈(push)和出栈(pop)的代码如下:

//入栈
void push(int a[],int value){
    if(top == MAX_SIZE-1){//MAX_SIZE为栈空间大小,此时栈满
        return ;
    }else{
       top++;//栈顶指针+1
    a[top]=value;
    }
}

//出栈
int pop(int a[]){
    if(top ==-1){//top指向-1,表示此时栈空
        return ;
    }else{
       delete_elem = a[top];
    top--;//栈顶指针-1
    return delete_elem;//返回删除的栈顶元素
    }
}

5.总结

**时间复杂度:**入栈O(1),出栈O(1),访问栈顶O(1)。
适用情况:元素需要“先进后出”。​
在我们调用函数的时候,函数调用的顺序,以及函数内部一些变量,都是以栈的形式存储。递归也是依赖着系统内部的栈来实现的,当递归过深或者没有退出时,就会出现“栈溢出”的现象,意思就是函数调用的次数超过了栈能够存储的容量。


公众号:萌凯的程序人生
一枚IT研究生,致力于分享自己的学习经历和总结!
喜欢的话请点赞关注,谢谢您!

栈,实现递归的数据结构_第4张图片

你可能感兴趣的:(数据结构,数据结构,栈)