一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则
栈
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
栈的实现
栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。如下图:
下面用顺序表(数组)来实现栈;
建立一个顺序表结构:
typedef int STDataType;
typedef struct Stack
{
STDataType* a;
int top; //表示栈顶
int capacity;//表示容量,当容量满时,扩容;
}ST;
创建一个结构体变量:ST st;在传数据之前要先初始化;不然当你没赋值就直接访问时会出现乱码或者报警告;
接下来就是向栈内传数据(压栈),要传结构体地址和要传的数据;
有压栈就有出栈;出栈用两个接口。1.返回栈顶数据 2.出栈
因为有时候只需要访问栈顶数据不需要出栈,如果想出栈又想返回数据,就先调用1,再调用2;
有时候还需要返回栈中元素
在一些复杂结构中要直接调用查看栈中是否有数据,判断栈是否为空;
用动态开辟的空间就必须手动释放
看一下如何调用的:
到此这篇关于C语言深入探究栈的原理的文章就介绍到这了,更多相关C语言 栈内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!