C数据结构:栈和队列应用场景

计算器实例

main.c

#include <stdlib.h>
#include <stdio.h>
#include "sqstack.h"void compute(sqstack* snum,datatype* data)
{datatype n1,n2,n;st_pop(snum,&n2);st_pop(snum,&n1);switch(*data){case '+':n = n1 +n2;break;case '-':n = n1 - n2;break;case '*':n = n1 * n2;break;case '/':n = n1 / n2;break;default:exit(1);break;}st_push(snum,&n);}
int get_pri(int op)
{switch(op){case '(':return 0;case '+':return 1;case '-':return 1;case '*':case '/':return 2;}
}
void deal_bracket(sqstack*snum ,sqstack* sop)
{datatype old_op;st_top(sop,&old_op);while(old_op != '('){st_pop(sop,&old_op);compute(snum,&old_op);st_top(sop,&old_op);}st_pop(sop,&old_op); //弹出左括号}
void deal_op(sqstack*snum,sqstack*sop,int op)
{datatype old_op;if( (st_isempty(sop)==0) ||op =='('  )  {st_push(sop,&op);return ;}st_top(sop,&old_op);if(get_pri(op) > get_pri(old_op)){st_push(sop,&op);return;}while( get_pri(op) <= get_pri(old_op) ){st_pop(sop,&old_op);compute(snum,&old_op);if(st_isempty(sop)== 0)break;st_top(sop,&old_op);}st_push(sop,&op);}
int main()
{datatype old_op;int i=0;int value =0;int flag = 0;char str[] = "(11+3)*2-5"; //23sqstack*snum,*sop;snum = st_create();sop = st_create();while(str[i] != '\0'){// printf("%c  \n",str[i]);// numif(str[i]> '0' && str[i]< '9' ){value = value*10 + (str[i]- '0') ;  //求差值,原来内容移位flag = 1;}else // op{if(flag == 1) //证明取过了数值{st_push(snum,&value);value = 0;flag = 0;}if(str[i]==')'){deal_bracket(snum,sop);}else // 可能是  ( + - * / {deal_op(snum,sop,str[i]);}}i++;}if(flag) //最后一个元素{st_push(snum,&value);}st_travel(snum);printf("--------\n"); while(!(st_isempty(sop)==0) ){st_pop(sop,&old_op);compute(snum,&old_op);if(st_isempty(sop)==0)break;st_top(sop,&old_op);}st_travel(snum);st_destroy(snum);st_destroy(sop);return 0;
}

sqstack.h

#ifndef SQSTACK_H
#define SQSTACK_H#define MAXSIZE 32typedef int datatype;typedef struct node_st
{datatype data[MAXSIZE];int top;
}sqstack;sqstack* st_create(void);int st_isempty(sqstack*);int st_push(sqstack*,datatype*);int st_pop(sqstack*,datatype*);int st_top(sqstack*,datatype*);void st_travel(sqstack*);int st_destroy(sqstack*);#endif

sqstack.c

#include <stdlib.h>
#include <stdio.h>
#include "sqstack.h"sqstack* st_create(void)
{sqstack*st;st = malloc(sizeof(*st));if(st == NULL)return NULL;st->top = -1;return st;
}
int st_isempty(sqstack*st)
{if(st->top == -1)return 0;return 1;
//    return (st->top == -1);
}
int st_push(sqstack*st,datatype* data)
{if(st->top == MAXSIZE-1 )return -1;st->data[++st->top] = *data;return 0;
}
int st_pop(sqstack*st,datatype*data)
{if(st_isempty(st)==0)return -1;*data = st->data[st->top--];return 0;
}
int st_top(sqstack*st,datatype*data)
{if(st_isempty(st )== 0)return -1;*data = st->data[st->top];return 0;
}
void st_travel(sqstack*st)
{if(st_isempty(st)== 0)return;for(int i=0;i<=st->top;i++){printf("%d ",st->data[i]);}printf("\n");
}int st_destroy(sqstack*st)
{free(st);st = NULL;return 0;
}

球钟算法

代码中包含的sqstack.h/sqstack.c和 queue.h/queue.c参考之前文章:C数据结构栈,C数据结构队列,采用的是顺序存储栈,顺序存储队列,如有疑问,可以给博主留言。

main.c

#include <stdlib.h>
#include <stdio.h>
#include "sqstack.h"
#include "queue.h"#define BALL_SIZE 27
static int check(queue*qu)
{int i = (qu->head+1)%MAXSIZE;while(i != qu->tail ){if(qu->data[i] > qu->data[(i+1)%MAXSIZE ])return 0;i = (i+1)%MAXSIZE;}return 1;
}int main()
{int t,time = 0;queue* qu;int value = 0;sqstack*st_min,*st_fivemin,*st_hour;qu = qu_create();st_min = st_create();st_fivemin = st_create();st_hour = st_create();for(int i=1;i<=BALL_SIZE;i++){qu_enqueue(qu,&i);}qu_travel(qu);while(1){qu_dequeue(qu,&t);time++;if(st_min->top != 3){st_push(st_min,&t);}else{while(st_isempty(st_min)!=0){st_pop(st_min,&value);qu_enqueue(qu,&value);}if(st_fivemin->top !=10){st_push(st_fivemin,&t);}else{while(st_isempty(st_fivemin)!=0 ){st_pop(st_fivemin,&value);qu_enqueue(qu,&value);}if(st_hour->top != 10){st_push(st_hour,&t);}else{while(st_isempty(st_hour) !=0 ){st_pop(st_hour,&value);qu_enqueue(qu,&value);}qu_enqueue(qu,&t);if(check(qu))break;}}}}printf("time = %d \n",time);qu_destroy(qu);st_destroy(st_min);st_destroy(st_fivemin);st_destroy(st_hour);return 0;
}

补充

大家也可以把上面用到的stack.h/llist.h两个文件编译为动态库使用。注意:

gcc -shared -fpic -o libstack_s.so stack.c 

 gcc main.c -o all -lstack_s -lllist_s

库之间有依赖关系,前面的动态库依赖于后面的stack_s中用到了llist

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

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

相关文章

基于SpringBoot的全国风景区WebGIS按省展示实践

目录 前言 一、全国风景区信息介绍 1、全国范围内数据分布 2、全国风景区分布 3、PostGIS空间关联查询 二、后台查询的设计与实现 1、Model和Mapper层 2、业务层和控制层设计 三、WebGIS可视化 1、省份范围可视化 2、省级风景区可视化展示 3、成果展示 总结 前…

P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数

蓝桥杯2023国B A、B题 A题 分析 dp问题 根据子序列&#xff1a;2&#xff0c;20&#xff0c;202&#xff0c;2023分为4个状态&#xff1b; 当前数字为2时&#xff0c;处于dp[0]&#xff0c;或者和dp[1]结合成dp[2]&#xff1b; 当前数字为0时&#xff0c;和dp[0]结合成dp[…

keil5软件安装教程(MDKv5.39)

keil5软件安装分为三部分&#xff1a; 目录 1.安装mdk 2.激活mdk 3.安装STM32芯片包 1.安装mdk 安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1PZoGhzI5Y19ROv7xe9QJKA?pwdgt3s 提取码&#xff1a;gt3s 1、下载keil5的压缩包并解压&#xff0c;鼠…

buuctf-misc题目练习三

荷兰宽带数据泄露 BIN 文件&#xff0c;也称为二进制文件&#xff0c;是一种压缩文件格式&#xff0c;可以 包含图像和视频等信息 , 并被许多应用程序用于各种目的。 RouterPassView是一个找回路由器密码的工具。 大多数现代路由器允许备份到一个文件路由器的配置&#xff0c…

CDGA|电子行业数据治理六大痛点及突围之道

CDGA|电子行业数据治理六大痛点及突围之道 随着信息技术的迅猛发展&#xff0c;电子行业对数据的需求和依赖日益增强。然而&#xff0c;数据治理作为确保数据质量、安全性及有效利用的关键环节&#xff0c;在电子行业中却面临着一系列痛点。本文将深入探讨电子行业数据治理的六…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文件包含 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

【Java基础】Maven继承

1. 前言 Maven 在设计时&#xff0c;借鉴了 Java 面向对象中的继承思想&#xff0c;提出了 POM 继承思想。 2. Maven继承 当一个项目包含多个模块时&#xff0c;可以在该项目中再创建一个父模块&#xff0c;并在其 POM 中声明依赖&#xff0c;其他模块的 POM 可通过继承父模…

4D 成像毫米波雷达:新型传感器助力自动驾驶

1 感知是自动驾驶的首要环节&#xff0c;高性能传感器必不可少 感知环节负责对侦测、识别、跟踪目标&#xff0c;是自动驾驶实现的第一步。自动驾驶的实现&#xff0c;首先要能够准确理解驾驶环境信息&#xff0c;需要对交通主体、交通信号、环境物体等信息进行有效捕捉&#x…

热爱电子值得做的电子制作实验

加我zkhengyang&#xff0c;进嵌入式音频系统研究开发交流答疑群(课题组) AM/FM收音机散件制作&#xff0c;磁带随声听散件&#xff0c;黑白电视机散件制作&#xff0c;功放散件制作&#xff0c;闪光灯散件制作&#xff0c;声控灯散件&#xff0c;等等&#xff0c;可提高动手能…

MultiBoot 和 QuickBoot

目录 MultiBoot简介MultiBoot 实现方式设置 bitstream 属性使用 ICAPE2 原语WBSTAR 寄存器定义 MultiBoot 工作流程生成mcs固化文件 Tcl 指令Fallback状态寄存器MultiBoot 正常加载状态看门狗1超时状态看门狗2超时状态CRC 错误和无 DESYNC 命令IDCODE 错误状态CRC 错误状态 Wat…

17 【Aseprite 作图】参考图和颜色

参考图 Aseprite 作图&#xff0c;“打开 - 一张参考图”&#xff0c;再把参考图拉到右边&#xff0c;就可以得到参考图和缩略图 取消选区 通过“选择 - 取消选择”&#xff0c;可以 取消选区 复制参考图的颜色 打开参考图后&#xff0c;参考图的调色板就会出现参考图所有的…

202466读书笔记|《一天一首古诗词》——借问梅花何处落,风吹一夜满关山

202466读书笔记|《一天一首古诗词》——借问梅花何处落&#xff0c;风吹一夜满关山 上册下册 《一天一首古诗词》作者李锡琴&#xff0c;蛮早前加入书架的已购买书籍&#xff0c;这次刚好有点时间&#xff0c;利用起来读完。 赏析没有细看&#xff0c;只读了诗词部分&#xff0…

Java数组的应用---选择排序(Select Sort)

一、需求&#xff1a;选择排序(Select Sort)&#xff0c;进行升序显示 在一组排列中把最大的数取出来放在一个新的列表里&#xff0c;再删去&#xff0c;在取最大的数出来&#xff0c;依次类推直到取到最后一个数字 二、定义一个无序的一维数组&#xff0c;并输出数组 程序运…

LabVIEW自动机械变速器(AMT)开发

LabVIEW自动机械变速器&#xff08;AMT&#xff09;开发 在现代汽车工业中&#xff0c;提升车辆的自动化水平和驾驶体验是一个不断追求的目标。随着技术的发展&#xff0c;自动机械变速器&#xff08;AutomatedMechanical Transmission, AMT&#xff09;凭借其较高的能效和较低…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

element-plus el-time-picker 时间段选择(可多选)

实现一个如图的时间段选择器 处理好时间回显逻辑&#xff0c;组件内[‘’,‘’],后端数据[{startTime:‘’,endTime:‘’}]处理好加和减的显示逻辑 <template><div><div v-for"(item, index) in currentChoose" :key"index" class"fl…

数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)

数据库管理184期 2024-05-07 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20240507&#xff09;1 JSON需求2 关系型表设计3 JSON关系型二元性视图3 查询视图总结 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20…

数据库表自增主键超过代码Integer长度问题

数据库自增主键是 int(10) unsigned类型的字段&#xff0c;int(M) 中 M指示最大显示宽度&#xff0c;不代表存储长度&#xff0c;实际int(1)也是可以存储21.47亿长度的数字&#xff0c;如果是无符号类型的&#xff0c;那么可以从0~42.94亿。 我们的表主键自增到21.47亿后&#…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

谷歌AlphaFold 3首发Nature,预测精准度提高100%,AI能帮助治疗癌症和免疫病 | 最新快讯

刚刚&#xff0c;顶级科学期刊英国《Nature》&#xff08;自然&#xff09;杂志发表了一份重磅、突破性研究论文。 北京时间 5 月 8 日 23 点&#xff0c;谷歌 DeepMind 和其英国子公司 Isomorphic Labs 联合团队在《自然》杂志上发表一份共 46 页的重要成果&#xff0c;联合发…