首页
IT
登录
6mi
u
盘
搜
搜 索
IT
第五周项目3—— 括号的匹配
第五周项目3—— 括号的匹配
xiaoxiao
2023-03-28
6
/*
* Copyright (c)2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:wu.cpp
* 作 者:武昊
* 完成日期:2016年9月29日
* 版 本 号:v1.0
*问题描述:假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配。
例如,输入2+(3+4)*[2+{[3]}]-8,输出匹配正确;输入2+(3+4*[2)+{[3]}-8,输出匹配错误。
*输入描述:输入表达式
*程序输出:输出判断结果
*/
main.cpp
#include "sqstack.h"
int
main()
{
char
c;
char
st[50];
int
d=1, i;
SqStack *s;
InitStack(s);
printf(
"请输入表达式:"
);
scanf(
"%s"
, st);
for
(i=0; st[i]!=
'\0'
&&d; i++)
{
switch
(st[i])
{
case
'('
:
case
'['
:
case
'{'
:
Push(s, st[i]);
break
;
case
')'
:
Pop(s, c);
if
(c!=
'('
) d=0;
break
;
case
']'
:
Pop(s, c);
if
(c!=
'['
) d=0;
break
;
case
'}'
:
Pop(s,c);
if
(c!=
'{'
) d=0;
break
;
}
}
if
(StackEmpty(s)&&d==1)
printf(
"配对正确!!\n"
);
else
printf(
"配对错误!!\n"
);
return
0;
}
sqstack.h
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef
char
ElemType;
typedef
struct
{
ElemType data[MaxSize];
int
top;
//栈指针
} SqStack;
//顺序栈类型定义
void
InitStack(SqStack *&s);
//初始化栈
void
DestroyStack(SqStack *&s);
//销毁栈
bool
StackEmpty(SqStack *s);
//栈是否为空
int
StackLength(SqStack *s);
//返回栈中元素个数——栈长度
bool
Push(SqStack *&s,ElemType e);
//入栈
bool
Pop(SqStack *&s,ElemType &e);
//出栈
bool
GetTop(SqStack *s,ElemType &e);
//取栈顶数据元素
void
DispStack(SqStack *s);
//输出栈
sqstack.cpp
#include "sqstack.h"
void
InitStack(SqStack *&s)
//初始化栈
{
s=(SqStack *)malloc(
sizeof
(SqStack));
s->top=-1;
}
void
DestroyStack(SqStack *&s)
//销毁栈
{
free(s);
}
int
StackLength(SqStack *s)
//返回栈中元素个数——栈长度
{
return
(s->top+1);
}
bool
StackEmpty(SqStack *s)
//判断是否为空栈
{
return
(s->top==-1);
}
bool
Push(SqStack *&s,ElemType e)
{
if
(s->top==MaxSize-1)
//栈满的情况,即栈上溢出
return
false
;
s->top++;
s->data[s->top]=e;
return
true
;
}
bool
Pop(SqStack *&s,ElemType &e)
{
if
(s->top==-1)
//栈为空的情况,即栈下溢出
return
false
;
e=s->data[s->top];
s->top--;
return
true
;
}
bool
GetTop(SqStack *s,ElemType &e)
{
if
(s->top==-1)
//栈为空的情况,即栈下溢出
return
false
;
e=s->data[s->top];
return
true
;
}
void
DispStack(SqStack *s)
//输出栈
{
int
i;
for
(i=s->top;i>=0;i--)
printf(
"%c "
,s->data[i]);
printf(
"\n"
);
}
运行结果:
知识点总结:
顺序栈算法库更加多元化,要熟练掌握。
转载请注明原文地址: https://ju.6miu.com/read-1209411.html
最新回复
(
0
)