数据结构篇-栈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进行投诉反馈,一经查实,立即删除!