- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 官地座环焊接工艺讲解.doc
- 少年王冕课件讲解.ppt
- 平台软件解决方案讲解.docx
- 嵌入式电力参数测量系统实验指导书(学生用161013)讲解.doc
- 少先队队前教育课件(详细版)12.8讲解.ppt
- 少先队活动全年记录(上下学期)讲解.doc
- 家里就应该有个私人游泳池讲解.doc
- 嵌入式系统的软硬件设计_俄罗斯方块讲解.docx
- 家庭电路 安全用电复习资料(一)讲解.doc
- 家庭教育的问题讲解.docx
- 2023-2024学年吉林省白城市重点中学高考临考冲刺数学试卷含解析.doc
- 2023-2024学年淮南市重点中学高考仿真卷化学试题含解析.doc
- 2023-2024学年吉林省北大附属长春实验学校高考冲刺模拟数学试题含解析.doc
- 2023-2024学年吉林省白城市重点中学高三(最后冲刺)数学试卷含解析.doc
- 2023-2024学年江苏省淮安市等四市高三下学期联考化学试题含解析.doc
- 2023-2024学年江苏省淮安市盱眙县马坝高级中学高三第一次调研测试数学试卷含解析.doc
- 2025云南省楚雄州姚安县高中教师招聘(12人)笔试备考试题及答案解析.docx
- 2025天津市金钰国有资本管理有限公司面向社会招聘总部专业技术人员1人笔试备考试题及答案解析.docx
- 2025年财政部部属单位招聘71人笔试备考题库及答案解析.docx
- 2025温州龙湾农商银行春季招聘笔试备考试题及答案解析.docx
文档评论(0)