接触C语言那么久了,相信大家多多少少会接触到栈的概念。对于新手来说可能只是略有耳闻,并没有太深入去了解它。今天相当于给大家捋一捋栈的概念和相关的一些知识点,小白可以当预习,大牛可以。。。。。。看看就好。 提到栈,就不能不提到我们在内存管理中提到的虚拟内存VM中的栈空间(没印象的朋友可以翻我前面一篇文章(把内存管理理解好,C语言真的不难学。今天带你攻破内存管理)。为什么它要叫栈空间,就是因为这个空间具有栈的逻辑特性。 卖了那么久关子,那栈到底是个啥东西?又有什么特性?栈的基本概念 栈是一种逻辑结构,是特殊的一种线性表。特殊在于:只能在固定的一端操作只要满足上述条件,那么这种特殊的线性表就会呈现一种后进先出的逻辑,这种逻辑就被称为栈。栈在生活中到处可见,比如堆叠的盘子、电梯中的人们、嵌套函数的参数等等。 由于约定了只能在线性表固定的一端进行操作,于是给栈这种特殊的线性表的插入、删除,另起了下面这些特定的名称:栈顶:可以进行插入删除的一端栈底:栈顶的对端入栈:将节点插入栈顶之上,也称为压栈,函数名通常为push()出栈:将节点从栈顶剔除,也称为弹栈,函数名通常为pop()取栈顶:取得栈顶元素,但不出栈,函数名通常为top() 基于这种固定一端操作的简单约定,栈获得了后进先出的基本特性,如下图所示,最后一个放入的元素,最先被拿出来。(就好比说吃完饭之后洗碗,一个碗洗干净后会叠到另外一个碗上面,当你全部都洗好了就会把碗一个个放入到消毒柜里面,这时候拿的碗总是在顶部的那个。) 栈的实际运用 所谓栈只是一种数据逻辑,那如何把栈为我们而用来存放数据呢?讲道理在日常嵌入式开发中这种数据结构比较少用,如果需要用到这种数据结构,我们通常会用链式存储的形式形成所谓链式栈。链式栈的组织形式与链表无异,只不过插入删除被约束在固定的一端。为了便于操作,通常也会创建所谓管理结构体,用来存储栈顶指针、栈元素个数等信息 链式栈结点设计 初始化 入栈 出栈 关于栈就先给大家介绍那么多,有不清楚的朋友欢迎关注、留言。下一节会给大家分享队列的概念和知识点