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

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吗?
...全文
422 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 是一个指针,你只是声明了,但没分配空间给它(没初始化),而是调用函数给它初始化的。
源码下载地址: https://pan.quark.cn/s/48210ff050c9 在生成具备死区间隔的脉冲宽度调制(PWM)信号时,STM32微控制器主要运用高级定时器(例如TIM1、TIM8)或通用定时器(如TIM2、TIM3、TIM4),这些定时器因其丰富的功能特性,能够支持复杂的PWM信号输出。 在当前应用场景下,死区间隔被设定为1微秒,此设置旨在电机驱动场景中防止功率开关器件的直通状态,避免电流尖峰,从而保护整个电路系统。 同时,CH1、CH2、CH3三个通道之间的相位间隔为3微秒,这种相位调制方式可用于三相电机的控制,达成对电机转矩的精准调控。 为了使STM32的定时器能够正常工作在PWM模式,需要进行一系列配置操作。 这些操作通常包括以下环节:1. **定时器初始化**:设定定时器的预分频器(Prescaler)参数,目的是获得期望的计数速率,例如,当系统时钟频率为72MHz,而目标PWM频率为50kHz时,预分频器的值应为72M/50K=1440。 2. **自动重载值(ARR)配置**:自动重载寄存器(ARR)的数值决定了PWM信号的整体周期。 以周期为20μs(对应1/50kHz)为例,ARR的值应设为20-1=19。 3. **比较通道选择**:涉及CH1、CH2、CH3等通道,它们分别与TIMx_CCR1、TIMx_CCR2和TIMx_CCR3寄存器相联系,通过设定这些寄存器的具体数值,可以控制各个通道的PWM占空比。 4. **死区时间设定**:利用TIMx_BDTR寄存器中的DTG字段来设定死区时间。 对于1微秒的死区间隔,必须依据定时器的工作模式与系统时钟速率来计算适宜的DTG参数。 5. **定时器启动**:完成所有配置后,使能定时器,PWM波形将...
代码下载链接: https://pan.quark.cn/s/38779f6f0507 《美食推荐系统的设计与实现》是一篇专注于美食推荐系统构建与运作的学术研究论文,其核心探讨的是如何设计并构建一个美食推荐系统,以更好地满足用户对美食的多样化需求并提升整体体验。该论文涵盖了美食推荐系统的需求调研、系统架构规划、系统开发执行以及系统质量检验等多个关键环节。在需求调研部分,论文首先阐述了中国餐饮行业的演进态势和城市生活节奏的提速,并强调了人们对饮食选择多样性和优化效果的追求。接着,论文强调了美食推荐系统在满足用户美食需求方面的必要性和核心价值。在系统架构规划部分,论文详细描述了美食推荐系统的整体布局和各功能模块的设计,包括用户信息管理单元、美食资讯管理单元、团购活动管理单元和推荐算法单元等。此外,论文还介绍了系统的数据结构设计和数据库构建方案,并采用了PHP+MYSQL+APACHE技术平台进行系统开发。在系统开发执行部分,论文记录了系统的构建过程,涉及前端与后端开发、数据库设计构建、系统测试及调试等环节。在系统质量检验部分,论文展示了系统的评估结果,涵盖性能测试、功能验证和安全防护测试等。该论文全面呈现了美食推荐系统的构建过程,有效满足了用户对美食的个性化需求与优化目标,展现出显著的实用价值和广阔的应用潜力。知识点:1. 美食推荐系统的需求调研,涉及中国餐饮业的发展态势、城市生活节奏的加快,以及人们对饮食选择多样化和优化效果的追求。2. 美食推荐系统的架构规划,包括系统的整体布局和功能模块设计,数据结构设计,以及采用PHP+MYSQL+APACHE技术平台进行系统开发。3. 美食推荐系统的构建过程,涵盖前端与后端开发、数据库设计构建、系统测试及调试等环节。4. 美...

70,039

社区成员

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

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