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

数据结构【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.kler.cn/a/135640.html

相关文章:

  • JSON-RPC-CXX深度解析:C++中的远程调用利器
  • 贪心算法入门(二)
  • 软件测试面试2024最新热点问题
  • 040 线程池
  • 【深圳大学】数据结构A+攻略(计软版)
  • #渗透测试#SRC漏洞挖掘#云技术基础02之容器与云
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(十三)
  • 二维偏序问题
  • 从傅里叶变换,到短时傅里叶变换,再到小波分析(CWT),看这一篇就够了(附MATLAB傻瓜式实现代码)
  • 多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测
  • 毕业设计ASP.NET 2368酒店信息管理系统【程序源码+文档+调试运行】
  • 腐蚀监测常用技术及作用
  • 解决word之间复制公式时,公式编辑器变成图片
  • 【算法】堆排序
  • (BMS)电池管理系统技术研究与仿真
  • Selenium安装WebDriver最新Chrome驱动(含116/117/118/119)
  • 为什么阿里推荐 LongAdder ,不推荐 AtomicLong ??
  • 蓝桥杯每日一题2023.11.20
  • WPF Visual, UIElement, FrameworkElement, Control这些类的区别
  • 【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)
  • 力扣刷题-二叉树-二叉树最小深度
  • 【STM32】RTC(实时时钟)
  • 13.真刀实枪做项目---博客系统(页面设计)
  • PHPmail 发送邮件错误 550 的原因是什么?
  • qt笔记之qml和C++的交互系列(一):初记
  • 8、创建第一个鸿蒙页面并实现页面跳转