目录
一、学习目标
- 知识点:
- 一文掌握数据结构的栈概念
二、基本概念
栈是一种逻辑结构,是特殊的线性表。特殊在:
- 只能在固定的一端操作
只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出, 先进后出”的逻辑,这种逻辑就被称为栈。栈在生活中到处可见,比如堆叠的盘子、电梯中的人们、嵌套函数的参数等等。
由于约定了只能在线性表固定的一端进行操作,于是给栈这种特殊的线性表的“插入”、“删除”,另起了下面这些特定的名称:
- 栈顶:可以进行插入删除的一端
- 栈底:栈顶的对端
- 入栈:将节点插入栈顶之上,也称为压栈,函数名通常为push()
- 出栈:将节点从栈顶剔除,也称为弹栈,函数名通常为pop()
- 取栈顶:取得栈顶元素,但不出栈,函数名通常为top()
基于这种固定一端操作的简单约定,栈获得了“后进先出”的基本特性,如下图所示,最后一个放入的元素,最先被拿出来:
链式栈:
// 链式栈节点
typedef struct node
{
datatype data;
struct node *next;
}node;
// 链式栈管理结构体
struct linkStack
{
node *top; // 链式栈栈顶指针 (链表头)
int size; // 记录链式栈当前元素个数
};
初始化:
P_Node NewNode( DataType * NewData )
{
// 申请链表节点
P_Node New = calloc( 1 , sizeof(Node) );
// 初始化链表节点
if (NewData)
{
memcpy( &New->Data , NewData , sizeof(DataType));
}
New->Next = NULL ;
return New ;
}
P_Stack InitStack( void )
{
// 申请管理结构体
P_Stack stack = calloc(1, sizeof(Stack));
// 初始化管理结构体结构体
// 入口地址
// 初始化链表
stack->p_stack = NewNode( NULL );
// 数量
stack->Size = 0 ;
return stack ;
}
顺序栈:
四、总结
本文介绍了数据结构栈概念,理解本文所有知识点后,便可打败其中的小怪,拿下经验值~