帮我填完整这段程序栈的应用――简单的括号匹配
答案:1 悬赏:80 手机版
解决时间 2021-04-19 08:03
- 提问者网友:听门外雪花风
- 2021-04-18 23:18
帮我填完整这段程序栈的应用――简单的括号匹配
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-04-19 00:47
#include
#define MAX 20
typedef struct
{
char data[MAX]; //栈中的数组data
int top; //栈顶位置
}sstack; //顺序栈
void initstack(sstack *s)//初始化顺序栈
{
s->top= 0;
}
void push(sstack *s, char x)
{
// s为栈指针,x为入栈的新元素,将x压入到s栈顶
if(s->top==MAX-1) //检查是否栈满
printf("栈已满,不能入栈!");
else
{ s->top++; //使top指向新的位置
s->data[s->top-1]=x; //把x放入新栈顶
}
}
void pop(sstack *s)
{ //若栈s不为空,则删除栈顶元素
if(s->top==0 ) //检查是否栈空
printf("栈为空,不能出栈!");
else
s->top--;//修改栈顶指针
}
char gettop(sstack *s)
{ //若栈s不为空,则取得栈顶元素
if(s->top==0) //栈空
printf("栈为空!");
else
return(s->data[s->top]); //返回栈顶元素
}
void check(sstack *s)
{
int bool; char ch;
push(s,'#'); //在栈底压入#,做为结束标志
scanf("%c",&ch); //读入一个字符
bool=1; //假设括号匹配
while(ch!='#'&&bool) //当读入的字符不是结束符且目前括号匹配
{
if(ch=='(') push(s,ch); //如果是左括号则入栈
if(ch==')') //如果是右括号
if(ch=gettop(s)=='#') bool=0; //如果栈顶是结束符,即没有匹配的'(',则设置不匹配标志,此时表
示')'多于'('
else pop(s); //左括号出栈,表与右括号配对
scanf("%c",&ch); //读入下一个字符,继续检查
}
if(gettop(s)!='#')&&bool==1 ; //栈顶还有'(',则'('多于')',设置不匹配标志
if(ch==')') printf("括号不匹配");
else printf("括号匹配");
}
void main()
{
sstack st,*s;
s=&st;
initstack(s); //初始化栈
printf("请输入由'('和')'组成的字符串,该字符串以'#'结束,程序将检查字符串是否括号匹配\n");
check(s);//进行括号匹配的检查
}
说实话,你给的分太少了,呵呵,粗略的做了下,应该可以了
#define MAX 20
typedef struct
{
char data[MAX]; //栈中的数组data
int top; //栈顶位置
}sstack; //顺序栈
void initstack(sstack *s)//初始化顺序栈
{
s->top= 0;
}
void push(sstack *s, char x)
{
// s为栈指针,x为入栈的新元素,将x压入到s栈顶
if(s->top==MAX-1) //检查是否栈满
printf("栈已满,不能入栈!");
else
{ s->top++; //使top指向新的位置
s->data[s->top-1]=x; //把x放入新栈顶
}
}
void pop(sstack *s)
{ //若栈s不为空,则删除栈顶元素
if(s->top==0 ) //检查是否栈空
printf("栈为空,不能出栈!");
else
s->top--;//修改栈顶指针
}
char gettop(sstack *s)
{ //若栈s不为空,则取得栈顶元素
if(s->top==0) //栈空
printf("栈为空!");
else
return(s->data[s->top]); //返回栈顶元素
}
void check(sstack *s)
{
int bool; char ch;
push(s,'#'); //在栈底压入#,做为结束标志
scanf("%c",&ch); //读入一个字符
bool=1; //假设括号匹配
while(ch!='#'&&bool) //当读入的字符不是结束符且目前括号匹配
{
if(ch=='(') push(s,ch); //如果是左括号则入栈
if(ch==')') //如果是右括号
if(ch=gettop(s)=='#') bool=0; //如果栈顶是结束符,即没有匹配的'(',则设置不匹配标志,此时表
示')'多于'('
else pop(s); //左括号出栈,表与右括号配对
scanf("%c",&ch); //读入下一个字符,继续检查
}
if(gettop(s)!='#')&&bool==1 ; //栈顶还有'(',则'('多于')',设置不匹配标志
if(ch==')') printf("括号不匹配");
else printf("括号匹配");
}
void main()
{
sstack st,*s;
s=&st;
initstack(s); //初始化栈
printf("请输入由'('和')'组成的字符串,该字符串以'#'结束,程序将检查字符串是否括号匹配\n");
check(s);//进行括号匹配的检查
}
说实话,你给的分太少了,呵呵,粗略的做了下,应该可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯