栈的顺序实现以及括号匹配判断程序
2009-03-01 13:09
441 查看
#define STACK_MAX_NUM 10
typedef struct tag_Stack_S
{
char StackData[STACK_MAX_NUM];
int top;
}Stack_S;
void Stack_Init(Stack_S *sl)
{
sl->top = -1;
}
//进栈
int Stack_In(Stack_S *sl, char Element)
{
if (sl->top == STACK_MAX_NUM - 1)
{
return T_ERR;
}
sl->top++;
sl->StackData[sl->top] = Element;
return T_OK;
}
//出栈
int Stack_Out(Stack_S *sl , char *Element)
{
if((sl->top == -1) || (NULL == Element))
{
return T_ERR;
}
*Element = sl->StackData[sl->top--];
return T_OK;
}
int Stack_Match(char *exps)
{
Stack_S stPoly;
int i = 0;
char Data = 0;
int nomatch = 0;
if(NULL == exps)
{
return T_ERR;
}
Stack_Init(&stPoly);
while((exps[i] != '/0') && (nomatch == 0))
{
switch(exps[i])
{
case '(':
case '{':
case '[':
Stack_In(&stPoly,exps[i]);
break;
case ')':
Stack_Out(&stPoly, &Data);
if(Data != '(')
{
nomatch = 1;
}
break;
case '}':
Stack_Out(&stPoly, &Data);
if(Data != '{')
{
nomatch = 1;
}
break;
case ']':
Stack_Out(&stPoly, &Data);
if(Data != '[')
{
nomatch = 1;
}
break;
default :
break;
}
i++;
}
if(nomatch == 0)
{
return T_OK;
}
else
{
return T_ERR;
}
}
typedef struct tag_Stack_S
{
char StackData[STACK_MAX_NUM];
int top;
}Stack_S;
void Stack_Init(Stack_S *sl)
{
sl->top = -1;
}
//进栈
int Stack_In(Stack_S *sl, char Element)
{
if (sl->top == STACK_MAX_NUM - 1)
{
return T_ERR;
}
sl->top++;
sl->StackData[sl->top] = Element;
return T_OK;
}
//出栈
int Stack_Out(Stack_S *sl , char *Element)
{
if((sl->top == -1) || (NULL == Element))
{
return T_ERR;
}
*Element = sl->StackData[sl->top--];
return T_OK;
}
int Stack_Match(char *exps)
{
Stack_S stPoly;
int i = 0;
char Data = 0;
int nomatch = 0;
if(NULL == exps)
{
return T_ERR;
}
Stack_Init(&stPoly);
while((exps[i] != '/0') && (nomatch == 0))
{
switch(exps[i])
{
case '(':
case '{':
case '[':
Stack_In(&stPoly,exps[i]);
break;
case ')':
Stack_Out(&stPoly, &Data);
if(Data != '(')
{
nomatch = 1;
}
break;
case '}':
Stack_Out(&stPoly, &Data);
if(Data != '{')
{
nomatch = 1;
}
break;
case ']':
Stack_Out(&stPoly, &Data);
if(Data != '[')
{
nomatch = 1;
}
break;
default :
break;
}
i++;
}
if(nomatch == 0)
{
return T_OK;
}
else
{
return T_ERR;
}
}
相关文章推荐
- 5.基于顺序栈 实现 检测括号匹配程序
- 数据结构(1)——顺序栈的实现,以及括号匹配的应用
- 顺序栈实现括号匹配
- C语言实现顺序栈的括号匹配
- 括号匹配问题(判断以及添加)
- 15数组实现顺序堆栈的括号匹配问题
- 顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)
- 正则表达式实现——匹配括号中的A 以及 匹配非括号中的A
- 括号匹配--顺序栈实现
- 判断括号是否匹配的递归与非递归实现
- 栈的链表实现,以及编译原理中的括号匹配
- 利用顺序栈实现括号匹配
- 数据结构编程笔记十一:第四章 串 定长顺序串以及模式匹配算法(BF和KMP)的实现
- 用顺序栈实现匹配括号功能
- 使用文件保存数据以及在此基础上实现判断登陆账号密码匹配问题的实现
- Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现
- C/C++数据结构通过顺序栈实现括号()匹配算法
- 判断表达式括号是否匹配,C语言堆栈实现
- Java实现用栈判断括号匹配问题
- 使用栈实现进制转换、括号匹配的检验、行编辑程序