当前位置: 首页 > news >正文

数据结构【DS】栈

共享栈

共享栈的目的是什么?

  • 目的:有效利用存储空间。

共享栈的存取数据时间复杂度为?

  • 存取数据时间复杂度为O(1)

共享栈如何判空?如何判满?

  • 两个栈的栈顶指针都指向栈顶元素,𝑡𝑜𝑝0=−1时0号栈为空;𝑡𝑜𝑝1=𝑀𝑎𝑥𝑆𝑖𝑧𝑒 时1号栈为空;
  • 仅当两个栈顶指针相邻(𝑡𝑜𝑝1−𝑡𝑜𝑝0=1) 时,判断为栈满。

链栈

链栈的优点是什么?

  • 不存在栈满上溢。

链栈的操作在哪进行?

  • 通常采用单链表实现,规定所有操作都在单链表表头进行。

链栈的基本操作

//定义栈结点

typedef struct SNode{                        //定义单链表结点类型

    int data;                                        //每个节点存放一个数据元素

    struct SNode *next;                        //指针指向下一个节点

}SNode, *LiStack;

//初始化一个链栈(单链表实现,栈顶在链头)

bool InitStack(LiStack &S) {

    S = (SNode *) malloc(sizeof(SNode)); //分配一个头结点

    S->next = NULL;         //头结点之后暂时还没有节点

    return true;

}

//判断栈是否为空

bool StackEmpty(LiStack S){

    if(S->next==NULL)   //头结点后面没有结点

        return true;    //返回true,表示栈为空

    else

        return false;

}

//入栈(本质上是单链表的“头插法”)

bool Push (LiStack &S, int x){

    SNode * p = (SNode *) malloc(sizeof(SNode));    //新分配一个结点

    p->data = x;     //存入新元素

    p->next = S->next;

    S->next = p;     //新结点插入到头结点后面

    return true;

}

//出栈(本质上是单链表的“头删法”)

bool Pop (LiStack &S, int &x){

    if (StackEmpty(S))      //栈空,出栈操作失败

        return false;

    SNode * p = S->next;     //栈不空,链头结点出栈

    x = p->data;             //x返回栈顶元素

    S->next = p->next;       //头删法,栈顶元素"断链"

    free(p);                 //释放结点

    return true;

}

http://www.lryc.cn/news/236128.html

相关文章:

  • 提高视频性能的 5 种方法
  • python有哪些高级的技术
  • 系列五、怎么查看默认的垃圾收集器是哪个?
  • 用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手
  • 浅谈基于云计算的环境智能监控系统
  • 向量机SVM代码实现
  • 基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用
  • 16. @PostConstruct注解和开关原理(验证码开关、IP开关)
  • uniapp+vue+Springboot 公司网站0~1搭建 前端前期设计篇
  • MFC 对话框
  • 关于node安装和nvm安装的问题
  • react 手机端 rc-table列隐藏(根据相关条件是否隐藏)、实现图片上传操作
  • 目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】三维重建
  • H110主板搭配魔改QNCW升级小记
  • Rust8.2 Fearless Concurrency
  • 合并两个有序链表(冒泡排序实现)
  • 【iOS】——知乎日报第五周总结
  • gRPC 四模式之 双向流RPC模式
  • 五分钟,Docker安装kafka 3.5,kafka-map图形化管理工具
  • 2023.11.18html中如何使用input/button进行网页跳转
  • java文件压缩加密,使用流的方式
  • 月子会所信息展示服务预约小程序的作用是什么
  • Windows核心编程 静态库与动态库
  • 【Spring Boot】如何自定义序列化以及反序列器
  • 6 Redis的慢查询配置原理
  • JAVA小游戏 “拼图”
  • Spring 配置
  • 全新酷盒9.0源码:多功能工具箱软件的最新iapp解决方案
  • aspose.cells java合并多个excel
  • 【每日一题】三个无重叠子数组的最大和