网站大量收购独家精品文档,联系QQ:2885784924

实验3栈-实验报告讲解.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实 验 报 告 课 程 数据结构及算法 实验项目 3、栈的建立及应用 成 绩 专业班级 指导教师 岳静 姓 名 学号 实验日期 实验目的 掌握栈的特性及其顺序存储结构。 掌握顺序栈的初始化、入栈和出栈操作,并能灵活运用。 实验内容 任意输入一个数学表达式,判断括号(包括大括号、中括号和小括号)是否匹配。 解决思路 可将数学表达式作为字符串进行处理。依次读取字符串中每个字符,对非括号字符不作处理,若为左括号,则应等待与其匹配的右括号。在判断过程中,后读到的左括号比先读到的左括号更急于得到匹配,这一要求与栈先进后出的特点相符,因此可考虑用栈实现括号的匹配。 首先,建立一个栈结构,且初始化为空,即令栈顶指针top=0。然后由键盘上随机输入一个带括号的语句或带括号数学表达式,同时将它们 保存在一个字符型数组中,再对字符数组中的每个元素进行访问,若是遇到右括号,则将栈中的栈顶元素出栈。当字符数组所有元素都访问完之后,再根据栈顶指针top的值判断左右括号是否匹配,若top=base时,则左右括号匹配,否则,左右括号不匹配。 在进行出栈运算时,通常在栈顶指针top=base时,就不能进行出栈运算了,否则返回错误状态。为正确判断形如“x*(y+z))”类型的表达式,可将出栈操作后的状态值可考虑进来,也就是说,当字符数组所有元素都访问完之后,若top=base且状态值为正确则左右括号匹配,否则,左右括号不匹配。 实验代码 #include stdio.h #include string.h #include stdlib.h #include malloc.h typedef int Status; typedef char SElemType; #define stack_INIT_SIZE 100 #define stackINCREMENT 10 #define OK 1 #define ERROR 0 typedef struct { SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈空间 }Sqstack; Status iniStack(Sqstack S) //初始化栈 {//构造一个空栈S S.base = (SElemType*)malloc(stack_INIT_SIZE * sizeof(SElemType)); if (!S.base)return(ERROR); S.top = S.base; S.stacksize = stack_INIT_SIZE; return OK; }//InitStack Status push(Sqstack S, SElemType x) { if (S.top - S.base = S.stacksize){ S.base = (SElemType *)realloc(S.base, (S.stacksize + stackINCREMENT)*sizeof(SElemType)); if (!S.base) return(ERROR); S.top = S.base + S.stacksize; S.stacksize += stackINCREMENT; } *S.top++ = x; return OK; } Status pop(Sqstack S, SElemType e) { if (S.top == S.base)return ERROR; e = *--S.top; return OK; } Status GetTop(Sqstack S, SElemType e) { if (S.top == S.base)return ERROR; e = *(S.top - 1); return OK; } Status StackEmpty(Sqstack S) { if (S.base == S.top) return OK; return ERROR; } Status Compare(Sqstack S) { int flag = OK; char ch,e; while ((ch=getchar())!= \n flag) { switch (ch) { case (: case [: case {:push(S,ch); break; case ):if (pop(S,e) == ERROR || e!=() flag = ERROR; break; case ]:if

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档