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

C语言数据结构:栈的操作实现

栈(Stack)是一种遵循后进先出(LIFO)原则的线性数据结构。栈的操作主要包括入栈(Push)出栈(Pop)

栈的应用:

1、中缀表达式转后缀表达式 

2、进制转换(直接取余得到的顺序和结果相反,通过栈来调转)

3、款项金额转中文大写

4、编辑器中括号的匹配

实现方式:

-顺序栈

-链表栈

本文使用顺序栈,实现二进制转换

// 顺序存储的栈
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef int Elemtype;
typedef struct stack
{
    Elemtype data[32];
    int top; // 栈顶下标
} Stack;

void Init(Stack *s);             // 初始化
void Push(Stack *s, Elemtype e); // 压栈
Elemtype Pop(Stack *s);          // 弹栈
int Empty(Stack *s);            // 判断是否为空
void Clean(Stack *s);            // 清空栈
Elemtype peek(Stack *s);         // 读取栈顶元素
int main(int argc, char const *argv[])
{
    Stack *s=(Stack *)malloc(sizeof(Stack));
    Init(s);//初始化
    int n=38;//对38进行二进制转化
    while (n!=0)//n不等于0 循环
    {
        Push(s,n%2);//对二取余,结果进栈
        n/=2;//除二
    }
    while (Empty(s))
    {
        printf("%d",Pop(s));//通过翻转顺序后,打印
    }
    
    return 0;
}
void Init(Stack *s)
{
    s->top=-1;//将栈顶置为-1
}
void Push(Stack *s, Elemtype e)
{
    s->data[++s->top]=e;//先自增栈顶位置,再将目标数值入栈
}
Elemtype Pop(Stack *s)
{
    return s->data[s->top--];    
}
int Empty(Stack *s)
{
    if(s->top==-1)//栈为空的充条件
    {
        printf("栈空");
        return 0;
    }
    return 1;
}
void Clean(Stack *s)
{
    s->top=-1;//将栈顶置为-1,下次入栈时,栈顶先自增,再覆盖原有的置,从而做到清栈
}
Elemtype peek(Stack *s)
{
    return s->data[s->top];//返回以栈顶为下标的元素
}

相关文章:

  • 【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试
  • 星越L_灯光操作使用讲解
  • ROS2与OpenAI Gym集成指南:从安装到自定义环境与强化学习训练
  • 力扣22.括号生成
  • 【鸿蒙开发】Hi3861学习笔记- NFC
  • DigitalFoto公司如何用日事清流程管理工具实现任务优先级与状态可视化?
  • css-in-js
  • PyTorch深度学习框架60天进阶学习计划 - 第28天:多模态模型实践(二)
  • 七天免登录 为什么不能用seesion,客户端的http请求自动携带cookei的机制(比较重要)涉及HTTP规范
  • 应用权限组列表
  • 深入理解MySQL日志机制
  • 23种设计模式-抽象工厂(Abstract Factory)设计模式
  • Linux下oa项目部署
  • Selenium工作原理详解
  • # [RPA] 使用八爪鱼进行高效网页数据采集
  • 鸿蒙HarmonyOS NEXT应用崩溃分析及修复
  • 【ROS实战】02-ROS架构介绍
  • 现代美学工业风品牌海报徽标设计PSAI无衬线英文字体安装包 Moldin – Condensed Sans Serif Font
  • oneAPI编译VASP 中 icx icpx和ifx设置 适用于icc和ifort Command not found
  • 初始javascript
  • 东风着陆场近日气象条件满足神舟十九号安全返回要求
  • 电话费被私改成48元套餐长达数年,投诉后移动公司退补600元话费
  • 金科服务:大股东博裕资本提出无条件强制性现金要约收购,总代价约17.86亿港元
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 三位成功女性,如何应对失败
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑