#include <stdio.h>
#define bool char
#define true 1
#define false 0
#define stack_size 100
typedef char StackElemType;
typedef struct
{
StackElemType elem[stack_size];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
bool Push(SeqStack *S,StackElemType *e)
{
if(S->top >= stack_size-1)
{
printf("满栈");
return false;
}
S->elem[++ S->top]=*e;
return true;
}
bool Pop(SeqStack *S,StackElemType *e)
{
if(S->top==-1)
{
printf("空栈 error");
return false;
}
*e = S->elem[S->top--];
return true;
}
bool GetTop(SeqStack *S,StackElemType *e)
{
if(S->top==-1)
{
return false;
}
*e=S->elem[S->top];
return true;
}
bool IsEmpty(SeqStack *S)
{
/*
if(S->top==-1)
{
return true;
}
else
{
return false;
}*/
return S->top==-1;
}
bool Match(StackElemType *e1,StackElemType *e2)
{
if(*e1=='(' && *e2==')' || *e1=='[' && *e2==']' || *e1=='{' && *e2=='}')
{
return true;
}
return false;
}
void BracketMatch(char *str)
{
SeqStack S;
InitStack(&S);
int i;
char ch;
for(i=0;str[i]!='\0';++i)
{
//printf("%c ",str[i]);
switch(str[i])
{
case '(':
case '[':
case '{':
Push(&S,&str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&S))
{
printf("\n右括号多余");
}
else
{
GetTop(&S,&ch);
if(Match(&ch,&str[i]))
{
Pop(&S,&ch);
}
else
{
printf("\n左右括号不匹配");
printf("ch:%c str[i]:%c ",ch,str[i]);
return;
}
}
}
}
if(IsEmpty(&S))
{
printf("括号匹配");
}
else
{
printf("括号不匹配");
}
}
int main()
{
char str1[100];
scanf("%s",str1);
/*
SeqStack S1;
InitStack(&S1);
*/
BracketMatch(str1);
return 0;
}
顺序栈 C语言练习
原创
©著作权归作者所有:来自51CTO博客作者饮闲的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:CCF 2018年12月第一题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】C语言实现顺序栈
【数据结构】第三章——栈、队列和数组详细介绍通过C语言实现顺序栈
数据结构 C语言 顺序栈 -
1.顺序表的实现——C语言
顺序表各种操作的代码实现
顺序表 冒泡排序 算法 随机数 -
【数据结构】C语言实现共享栈
【数据结构】第三章——栈、队列与数组详细介绍通过C语言实现共享栈
数据结构 C语言 栈 共享栈 -
顺序栈C语言实现
“`#include <stdio.h>#define MAXSIZE 10001#define ELEMTYPE int
c语言 typedef struct 栈 数据结构 -
C语言练习
乱七八糟的练习
i++ 字符串 #include -
【C语言】数据结构-栈(顺序表实现)
本文详解了数组栈的实现
c语言 数据结构 链表 Stack ci -
(数据结构)C语言实现顺序栈和链栈
顺序栈,链栈,队列的
c 顺序栈 链栈 数据结构 #include