数据结构篇-栈BOOS关卡简介
2023-12-15 09:26:19
目录
一、学习目标
- 知识点:
- 一文掌握数据结构的栈概念
二、基本概念
????????栈是一种逻辑结构,是特殊的线性表。特殊在:
- 只能在固定的一端操作
????????只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出, 先进后出”的逻辑,这种逻辑就被称为栈。栈在生活中到处可见,比如堆叠的盘子、电梯中的人们、嵌套函数的参数等等。
????????由于约定了只能在线性表固定的一端进行操作,于是给栈这种特殊的线性表的“插入”、“删除”,另起了下面这些特定的名称:
- 栈顶:可以进行插入删除的一端
- 栈底:栈顶的对端
- 入栈:将节点插入栈顶之上,也称为压栈,函数名通常为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 ;
}
顺序栈:
四、总结
? ? ? ? 本文介绍了数据结构栈概念,理解本文所有知识点后,便可打败其中的小怪,拿下经验值~
? ? ? ? 本文参照?粤嵌文哥?部分课件经整理和修改后发布在C站,如有转载,请联系本人
文章来源:https://blog.csdn.net/qq_51294997/article/details/134981107
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!