- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 括号匹配
括号匹配问题;制作过程;①括号匹配问题的设计内容;②算法思想描述;(1)算法
顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;
当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;
若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确;
若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号;
字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号;
否则,括号配对正确。;(2)程序的实现;出栈
Status Pop(SqStack *S,SElemType *e)
{
/* 若栈不空,则删除S的栈顶元素,用e返回其值,
并返回OK;否则返回ERROR */
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
;运行语句
void StackTraverse(SqStack S,void(*visit)(SElemType))
{while(S.topS.base)
visit(*S.base++);
printf(\n);}
void check()
{SqStack s;
SElemType ch[80],*p,e;
InitStack(s); /* 初始化栈成功 */
printf(“请输入一个算术表达式
(可包含()、[]和{})\n);
gets(ch);
p=ch; /* p指向字符串的首字符 */
while(*p) /* 没到串尾 */
switch(*p)
{case (:
case [:
case {:Push(s,*p++);
/* 左括号入栈,且p++ */
break;
case ):
case ]:
case }:if(!StackEmpty(s)) /* 栈不空 */;情况①
void Push(SqStack *S,SElemType e)
{ /* 插入元素e为新的栈顶元素 */
if((*S).top-(*S).base=(*S).stacksize)
{
(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACK_INCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACK_INCREMENT;
}
*((*S).top)++=e;
}
Status Pop(SqStack *S,SElemType *e)
{
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
;
;
;情况④
void Push(SqStack *S,SElemType e)
{ /* 插入元素e为新的栈顶元素 */
if((*S).top-(*S).base=(*S).stacksize)
{
(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACK_INCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACK_INCREMENT;
}
*((*S).top)++=e;
}
Status Pop(SqStack *S,SElemType *e)
{
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
;⑤程序的运行;通过本次项目实践学到了
掌握了用高级语言实现算法的基本步骤和方法
对于应用顺序栈的知识解决和分析问题的能力有了新的理解
提高了理论和实际相结合的能力
;谢 谢 !
您可能关注的文档
- 数学分数指数幂课件.ppt
- 数学五上说教材-蔡玉凤.ppt
- 数学二年级下册《租船》讲课1.ppt
- 数学八年级上册一次函数导学案1.doc
- 数学实践与认识5.ppt
- 数学四年级下册四则运算整理复习课件.ppt
- 数学六年级上西师大版2.3圆的面积课件11.ppt
- 数学分析 第五章 导数4-5.ppt
- 数学建模 液滴高度问题.doc
- 数学建模 创意平板折叠桌.doc
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)