链式栈基础

news2025/2/28 17:25:51

一.链式栈的栈顶在哪里?

二.链栈的结构:

typedef struct LSNode

{

        int data;

        struct LSNode* next;

}LSNode ,*PLStack;

//链栈的节点.由于栈顶在第一个数据节点,所以不需要top指针

三.链式栈的实现:

//初始化
void  InitStack(PLStack ps)
{
    assert(ps != NULL);
    if (ps == NULL)
        return;
    ps->next = NULL;
}
//往栈中入数据(入栈操作)
bool  Push(PLStack ps, int val)
{
    assert(ps != NULL);
    if (ps == NULL)
        return false;

    LSNode* p = (LSNode*)malloc(sizeof(LSNode));
    assert(p != NULL);

    p->data = val;
    p->next = ps->next;
    ps->next = p;

    return true;
}
//获取栈顶元素的值,但是不删除
bool  GetTop(PLStack ps, int* rtval )
{
    assert(ps != NULL);
    if (ps == NULL)
        return false;

    if (IsEmpty(ps))
        return   false;

        *rtval=ps->next->data;
        return true;
}
//获取栈顶元素的值,但是删除
bool   Pop(PLStack ps, int* rtval)
{
    assert(ps != NULL);
    if (ps == NULL)
        return false;

    if (IsEmpty(ps))
        return   false;

    LSNode* p = ps->next;
    *rtval = p->data;

    ps->next = p->next;
    free(p);
    return true;
}
//判空
bool IsEmpty(PLStack ps)
{
    return ps->next == NULL;
}
//获取栈中有效元素的个数
int  GetLength(PLStack ps)
{
    assert(ps != NULL);
    if (ps == NULL)
        return -1;
    int count = 0;
    for (LSNode* p = ps->next; p != NULL; p = p->next)
    {
        count++;
    }
    return count;
}
//清空所有的数据
void Clear(PLStack ps)
{
    Destroy(ps);
}
//销毁
void Destroy(PLStack ps)
{
    //总是删除第一个数据节点
    LSNode* p;
    while (ps->next != NULL)
    {
        p = ps->next;
        ps->next = p->next;
        free(p);
    }
}

四.链式栈的总结:

链栈栈顶:栈顶在表头(即第一个数据节点)(时间复杂度是O(1))(采用的是链表的头插法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IBM ServeRAID M1015阵列卡 支持RAID5,需要配件

最近一台IBM x3400m3的旧服务器,折腾一下,要添置硬盘,重做RAID,阵列卡是ServeRAID M1015,默认进去WebBIOS,只有RAID0和RAID1,没有RAID5,参考官方原版的手册,如下图&#…

centos系列:【 全网最详细的安装配置Nginx,亲测可用,解决各种报错】

全网最详细的安装配置Nginx,亲测可用,解决各种报错 全网最详细的安装配置Nginx1、 安装环境依赖2、 下载Nginx包3、编译Nginx4、安装Nginx5、启动Nginx6、配置Nginx7、了解Nginx服务的主配置文件 nginx.conf8、基于授权的访问控制9、基于IP和端口的访问控…

【Redis基础】Redis基本的全局命令

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! Redis基本的全局命令 1,KEYS命令 语法:KEYS pattern KEYS命令用来查询服…

vivado综合分析与收敛技巧2

1、分解深层存储器配置 , 实现功耗与性能平衡 在深层存储器配置中 , 可使用综合属性 RAM_DECOMP 实现更好的存储器分解并降低功耗。此属性可在 RTL 中设置。将RAM_DECOMP 属性应用于存储器时 , 存储器是在较宽的原语配置中设置的 &#x…

Kubernetes(K8s)-Kubernetes介绍-01

Kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署: 互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程…

现代C++之万能引用、完美转发、引用折叠

现代C之万能引用、完美转发、引用折叠 0.导语1.问题引入2.引入万能引用3.万能引用出现场合4.理解左值与右值4.1 精简版4.2 完整版4.3 生命周期延长4.4 生命周期延长应用5.区分万能引用6.表达式的左右值性与类型无关7.引用折叠和完美转发7.1 引用折叠之本质细节7.2 示例与使用7.…

IO多路复用就这么简单?

通过本文你可学到: 阻塞IO、非阻塞IO的区别、优缺点; IO多路复用的原理,为什么高性能; select原理、优缺点; poll原理、优缺点; epoll原理、优缺点 select、poll、epoll 到底是同步IO还是异步IO? ep…

CSS核心功能手册:从熟悉到精通

CSS核心功能代码 文章目录 CSS核心功能代码[toc]参考HTML代码尺寸操作设置元素尺寸内边距外边距设置默认布局边距用途和使用场景: 背景设置**背景颜色 (background-color)**:**背景图像 (background-image)**:**背景重复 (background-repeat)**:**背景位置 (backgro…

绘制彩色正多边形-第11届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第10讲。 绘制彩色正多边形…

ffmpeg 免安装,配置环境变量

1、下载ffmpeg https://download.csdn.net/download/qq284489030/88579595 2、解压 解压ffmpeg-4.4-essentials_build.zip到目标文件夹,比如 d:\apps下; 3、配置环境变量 (1)电脑桌面鼠标右键点击“此电脑”,弹出…

Abaqus飞机起落架扭力臂拓扑优化

Abaqus飞机起落架扭力臂拓扑优化 Abaqus除了可以对结构进行强度分析,同样也自带强大的优化功能,下面通过一个简 单的实例演示在Abaqus中进行拓扑优化,另外,如果需要更加强大的拓扑优化仿真,可以 在TOSCA中进行。 定义接…

揭秘发布订阅模式:让消息传递更高效

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Unity中Shader优化通用规则

文章目录 前言一、精度优化1、三种精度 fixed / half / float2、位置坐标、物理坐标类使用float3、HDR颜色、方向向量类使用half4、普通纹理、颜色类使用 fixed5、实际上,使用的精度取决于 平台 和 GPU6、现在桌面级GPU都是直接采用 float , Shader中的 fixed / hal…

【STM32】OLED显示屏

1 调试方式 1. 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息 2. 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上 3. Keil调试模式:借助Keil软件的调试模…

直接套用的软件详细设计说明书

软件开发全套资料过去进主页!

Libavutil详解:理论与实战

文章目录 前言一、Libavutil 简介二、AVLog 测试1、示例源码2、运行结果 三、AVDictionary 测试1、示例源码2、运行结果 四、ParseUtil 测试1、示例源码2、运行结果 前言 libavutil 是一个实用库,用于辅助多媒体编程,本文记录 libavutil 库学习及 demo 例…

windows电脑、苹果系统和安卓手机日程提醒双向同步如何操作?

在这个信息飞速传递的时代,我们时常需要在不同设备之间同步日程提醒,而对于同时使用Windows电脑、苹果系统和安卓手机的用户来说,这显得尤为重要。今天,我将分享一个简单的操作,让你在它们之间实现日程提醒的双向同步。…

实现电商平台与营销系统无缝集成:雅座的无代码开发与API连接

无代码开发:营销的新引擎 在数字化转型的浪潮中,无代码开发已成为企业提升效率、减少成本的新引擎。这种开发方式允许非技术人员通过图形界面构建应用程序,无需编写代码即可实现复杂功能。这对于营销、广告推广以及用户运营等业务尤为重要&a…

性能测试:深入理解并发量,线程数,吞吐量,TPS

并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标。 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数&#xff…

出于隐私和安全的考虑,有时需要从谷歌删除你的个人数据,有两种方法

如果你是公众人物、企业或拥有个人品牌的人,那么拥有在线形象很重要。然而,你可能会发现,通过谷歌搜索,陌生人可以获得你的个人信息,如联系方式、地址和财务信息,这会让你感到不安。 幸运的是,…