数据结构篇-栈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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。