栈与队列 数据结构 C语言

2023-11-06

目录

一、栈

1、类型定义

2、接口函数

3、功能实现

初始化栈

进栈

删除栈顶

出栈

销毁栈

其他功能


一、栈

先进后出(后进先出)

1、类型定义

typedef int STDataType;

typedef struct Stack
{
    STDataType* a;
    int top;
    int capacity;
}ST;

2、接口函数

void StackInit(ST* ps);

void StackDestroy(ST* ps);

void StackPush(ST* pa, STDataType x);

void StackPop(ST* ps);

STDataType StackTop(ST* ps);

int StackSize(ST* ps);

bool StackEmpty(ST* ps);

3、功能实现

初始化栈

void StackInit(ST* ps)
{
    assert(ps);
    ps->a = NULL;
    ps->top = 0;
    //初始化时,top给的是0,意味着top指向栈顶数据的下一个
    //初始化时,top给的是-1,意味着top指向栈顶数据
    ps->capacity = 0;
}

进栈

void StackPush(ST* ps, STDataType x)
{
    assert(ps);

    if (ps->top == ps->capacity)
    {
        int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newCapacity);
        if (tmp == NULL)
        {
            printf("realloc fail\n");
            exit(-1);
        }

        ps->a = tmp;
        ps->capacity = newCapacity;
    }

    ps->a[ps->top] = x;
    ps->top++;

}

删除栈顶

void StackPop(ST* ps)
{
    assert(ps);
    assert(!StackEmpty(ps));

    ps->top--;
}

出栈

无特定函数

//打印数据,取数据
    while (!StackEmpty(&st))//当栈不为空时
    {
        printf("%d ", StackTop(&st));
        StackPop(&st);//销毁当前栈顶,使下一个数成为栈顶
    }

销毁栈

void StackDestroy(ST* ps)
{
    assert(ps);
    free(ps->a);
    ps->a = NULL;
    ps->capacity = ps->top = 0;
}

其他功能

STDataType StackTop(ST* ps)
{
    assert(ps);
    assert(!StackEmpty(ps));
    return ps->a[ps->top - 1];
}

int StackSize(ST* ps)
{
    assert(ps);

    return ps->top;
}

bool StackEmpty(ST* ps)
{
    assert(ps);
    
    /*if (ps->top > 0)
    {
        return true;
    }
    else
    {
        return false;
    }*/

    return ps->top == 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

栈与队列 数据结构 C语言 的相关文章

随机推荐

  • 决策树(Decision Tree)

    Author xiaoran Email PursuitFlow 163 com xiaoranone 126 com Datawhale 简介和算法 决策树是机器学习最常用的算法之一 它将算法组织成一颗树的形式 其实这就是将平时所说的if
  • Kompose使用

    参考网址 https kubernetes io docs tools kompose user guide Kompose是一个转换工具 可以将docker compose编排docker compose yaml文件转换为kuberne
  • osgEarth的Rex引擎原理分析(一二九)地图下载器实现原理

    目标 七十二 中问题148 java版本 String iPath http online2 map bdimg com tile qt tile x 4 y 4 z 5 styles pl udt 20171031 scaler 1 p
  • 免费的crm系统部署在自己的服务器,CRM软件的三种部署方式

    企业部署CRM软件有三种不同选择 他们在成本 风险和利益上各有不同 本文将逐一介绍这三类CRM部署方式 本地部署 软件托管和服务器代管 软件即服务 一 CRM本地部署方式 这是将软件客户端 服务器部署在客户本地服务器的一种方式 这种方式为客
  • 神经网络学习小记录63——Keras 图像处理中注意力机制的代码详解与应用

    神经网络学习小记录63 Keras 图像处理中注意力机制的解析与代码详解 学习前言 什么是注意力机制 代码下载 注意力机制的实现方式 1 SENet的实现 2 CBAM的实现 3 ECA的实现 注意力机制的应用 学习前言 注意力机制是一个非
  • 關於 React 中的 Hooks - 完全上手指南

    關於 React 中的 Hooks 完全上手指南 前言 正文 什麼是 Hooks useState 自定義 Hooks useEffect useRef useLayoutEffect useCallback useMemo useRedu
  • C语言进阶——4.宏定义

    C语言进阶 4 宏定义 1 宏定义是什么 宏是用来表示一段代码的标识符 宏也是标识符 也要满足标识符的规则 但通常习惯使用大写字母和下划线命名 2 宏定义怎么用 宏定义通常有三种用法 当作常量使用 当作函数使用 编译预处理 2 1 宏定义常
  • 关于idea出现java: 无效的目标发行版: 8、9、11问题的解决方式

    1 首先Project settings 将环境设置为1 8 2 如果有多个module都要设置一下 3 都设置好了之后点击apply应用 点击ok关闭设置页面 然后点击File gt settings 进入设置页面 找到 Java Com
  • 腾讯策略协作型 AI「绝悟」升级至王者荣耀电竞职业水平

    感谢阅读腾讯AI Lab微信号第80篇文章 本文将介绍腾讯策略协作型 AI 绝悟 最新进展 达到王者荣耀电竞职业水平 长线策略及团队协作能力全面提升 腾讯 AI Lab 与王者荣耀共同探索的前沿研究项目 策略协作型 AI 绝悟 今天在吉隆坡
  • 经典排序算法:快速排序(Quick Sort)

    快速排序算法 快速排序算法被称为20世纪十大算法之一 是最重要的算法之一 是一定要掌握和熟练的 快速排序的基本思想是 分治法 1 先从数列中取出一个数作为基准数 2 分区过程 将比这个数大的数全放到它的右边 小于或等于它的数全放到它的左边
  • jdbc:mysql://127.0.0.1:3306/test_: No suitable driver found for jdbc:mysql://127.0.0.1:3306/bank

    今天遇到个很奇怪的问题 项目登录上去之后 去修改某张表的一条记录 突然报错 No suitable driver found for jdbc mysql 127 0 0 1 3306 bank 项目可以登录 那就不是数据库配置文件的问题
  • 状态压缩技巧:动态规划的降维打击

    刷题认准labuladong 东哥带你手把手撕力扣 点击下方卡片即可搜索 我们号之前写过十几篇动态规划文章 可以说动态规划技巧对于算法效率的提升非常可观 一般来说都能把指数级和阶乘级时间复杂度的算法优化成 O N 2 堪称算法界的二向箔 把
  • 史上最全的maven pom.xml文件教程详解

    原文地址 http www zuidaima com share 1781583829978112 htm
  • 部署Prometheus

    1 解压prometheus压缩包 root node5 tar xf prometheus 2 38 0 linux amd64 tar gz C usr local 2 对压缩后的文件做软连接 root node5 ln sv usr
  • 人工智能技术的应用越来越广,极大促进了无人机产业的发展

    备受关注的第二十三届中国国际高新技术成果交易会 简称 高交会 于12月27日在深圳开幕 本届高交会分别在深圳会展中心 福田 和深圳国际会展中心 宝安 同期举办 吸引了众多优秀展商一展风采 本届高交会采用了 线上 线下 联动的方式 线下展览总
  • Shell脚本基础介绍

    shell基础简介 编写脚本通常使用某种基于解释器的编程语言 而shell脚本不过就是一些文件 我们能将一系列需要执行的命令写入其中 然后通过shell来执行这些脚本 进入Linux系统 Ubuntu 打开终端Terminal 表示普通用户
  • 【深度学习】- NLP系列文章之 1.文本表示以及mlp来处理分类问题

    系列文章目录 1 文本分类与词嵌入表示 mlp来处理分类问题 2 RNN LSTM GRU三种方式处理文本分类问题 3 评论情绪分类 还是得开个坑 最近搞论文 使用lstm做的ssd的cache prefetching 意味着我不能再划水了
  • JS实现一键回到顶部的功能(兼容所有浏览器,超级详细)

    我们在浏览网页的时候 大部分都有一个一键回到顶部的按钮 无论是pc端还是移动端 这个功能都很常见 我在一次面试的时候 也要求手写这个功能 首先我们新建一个空页面 把body的高度设置为3000px 这样做的目的是让浏览器出现滚动条 不然我们
  • 动态数组的实现

    public class MyArrayList
  • 栈与队列 数据结构 C语言

    目录 一 栈 1 类型定义 2 接口函数 3 功能实现 初始化栈 进栈 删除栈顶 出栈 销毁栈 其他功能 一 栈 先进后出 后进先出 1 类型定义 typedef int STDataType typedef struct Stack ST