关于一个用栈来检查表达式的括号匹不匹配的代码,其中表达式中括号有三种:(),[]和{}

songsong2008 2004-11-15 07:11:23
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 200
typedef struct
{
char * base;
char * top;
}stack;

int Init(stack *s)
{s->base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s->base) return 0;
s->top=s->base;
return 1;
}
void Destroy(stack *s)
{free(s->base);
s->base=NULL;
s->top=NULL;
}
void Push(stack *s,char c)
{
*s->top++=c;
}

int pop(stack *s,char *c)
{if(s->top==s->base) return 0;
*c=*--s->top;
return 1;
}
/*---------------------------------------------------------------*/
int Check(stack *s,char *expr)
{int i;
char c[1];
for(i=0;expr[i]!='\0';i++)
{if(expr[i]=='{'||expr[i]=='['||expr[i]=='(') Push(s,expr[i]);
if(expr[i]=='}'||expr[i]==']'||expr[i]==')')
{
if(pop(s,c)==0) return 0;/*栈空,表达式有错*/
else
{if(expr[i]==')')
{
if(c[0]!='(') return 0;
}
else
if(expr[i]-c[0]!=2) return 0;/*'{'和'}'式'['和']'的ASCII码差2*/
}
}
}
if(s->base!=s->top)
return 0;
return 1;
}
/*-------------------------------------------------------------*/
void main()
{
char expr[100];
stack *s;
printf("input the expression\n");
scanf("%s",expr);
if(!Init(s))//第一句warning
exit(0);
if(Check(s,expr))//第二句warning
printf("right\n");
else
printf("wrong\n");
Destroy(s);//第三句warning
}
-----------------------------
程序运行正确,不过有三个warning(即main中用到s的地方都有一个相同的warning:"possible use "s" before definition")这是什么原因呢?我不是已经在stack *s这一句定义s吗?
...全文
434 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlackEagle_ 2004-11-15
  • 打赏
  • 举报
回复
在stack *s;后面加一句:
s = null;
kobefly 2004-11-15
  • 打赏
  • 举报
回复
严奶奶数据结构书上的啊
有部分伪代码
sharkhuang 2004-11-15
  • 打赏
  • 举报
回复
压栈匹配扩府经典算法哈
liujingfu123 2004-11-15
  • 打赏
  • 举报
回复
在main()中,你的s 是一个指针,你只是声明了,但没分配空间给它(没初始化),而是调用函数给它初始化的。
内容概要:本文针对含可再生能源的配电网中空调负荷的优化控制问题开展深入研究,提出了一种基于Matlab代码实现的最优调控策略。鉴于可再生能源(如风能、太阳能)出力具有强波动性和间歇性,给配电网运行稳定性带来严峻挑战,该研究充分利用空调负荷作为典型温控负荷所具备的热惯性与可调度潜力,通过科学建模与优化算法实现需求侧灵活响应。文中构建了一个综合考虑用户舒适度约束、电网负荷平衡及可再生能源消纳能力的多目标优化模型,并采用高效的数值优化方法进行求解,有效实现了削峰填谷、平抑功率波动、提升系统运行效率与能源利用水平的目标。配套提供的Matlab代码具备良好的可读性与可复现性,为相关领域的科研仿真与教学实践提供了有力支撑,有助于推动智能电网环境下需求响应技术与综合能源系统优化理论的发展。; 适合人群:电气工程、自动化、新能源科学与工程、能源动力系统等相关专业的硕士博士研究生、高校科研人员,以及从事电力系统调度、微电网控制、智能电网技术研发的工程技术人员。; 使用场景及目标:①用于学习和复现含可再生能源配电网中温控负荷(如空调)的优化控制方法;②支撑科研工作中关于需求响应机制、负荷侧管理策略、多时间尺度优化调度等课题的建模与仿真;③为高比例可再生能源接入背景下的配电系统稳定运行与低碳高效管理提供技术路径参考。; 阅读建议:建议结合Matlab代码同步阅读,重点关注优化模型的数学构建、约束条件设定及求解算法的编程实现细节,同时可参照文中所述应用场景进行仿真参数调整与结果对比分析,以深化对现代电力系统源-荷互动协调控制机制的理解。
源码下载地址: https://pan.quark.cn/s/6466a22323cb 景观指数的计算与Fragstats软件的操作指南,FragStats景观格局分析软件,简而言之是一个集成化的景观指数分析平台,无需用户独立开发相关算法及文件的读写功能。据调查,FragStats(Fragment Statistic)的官方定义为“FRAGSTATS is a computer software program designed to compute a wide variety of landscape metrics for categorical map patterns.(FRAGSTATS是一款旨在揭示分类图的分布格局而设计的、计算多种景观指数的桌面软件程序)”,当前可计算超过100种指数,涵盖近年新提出的景观指数。【景观指数分析与FragStats 4.2】景观指数的计算在生态学与地理信息系统(GIS)领域中是一种关键的分析手段,它用于量化和洞察景观的结构、多样性及复杂性。FragStats 4.2是一款专为这一目的设计的软件,它提供了一个综合性的平台,能够计算超过100种不同的景观指数,包括最新的研究指数。该软件不仅避免了用户自行编写算法和处理文件输入输出的复杂操作,而且与ArcMap 10.1等空间分析工具相容,尽管可能需要借助特定的相容性解决方案。在运用FragStats 4.2之前,必须确认软件的配置无误。从官方网站获取并安装软件,注意要以管理员身份执行。在建立新项目后,可以载入多种栅格数据,包括GDAL和ESRI格式,以及ASCII/二进制文件。对于ASCII/二进制文件,必须事先了解头文件信息,因为它们不包含像元尺寸、行列数等元数据。此...

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧