现在的位置: 首页 > 综合 > 正文

数据结构_符号匹配

2014年06月12日 ⁄ 综合 ⁄ 共 1343字 ⁄ 字号 评论关闭
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define OK 1;
#define ERROR 0
#define  STACK_SIZE 100   //储存空间的初始长度
#define  STACK_INC   10   //储存空间的增加长度
typedef char Elem;
typedef struct  
{
Elem *base;//栈低指针
Elem *top; //栈顶指针
int size;  //当前分配的储存空间
}SqStack;
typedef int status;  //状态量
//创建一个空栈,如果栈顶和栈顶相等这是空栈
status CreatStack(SqStack &S)
{
S.base=(Elem *)malloc(STACK_SIZE*sizeof(Elem));
S.top=S.base;
S.size=STACK_SIZE;
return OK;
}
//堆栈是否为空
status StackEmpty(SqStack S)
{
if((S.base-S.top)==0)
return OK;
return ERROR;
}
//进栈
status push(SqStack &S,Elem e)
{
if(S.top-S.base>=S.size)//栈满,需要加内存
{
S.base=(Elem *)realloc(S.base,(S.size+STACK_INC)*sizeof(Elem));
S.top=S.base+S.size;
S.size+=STACK_INC;
}
*S.top=e;
S.top+=1;
return OK;
}
//出栈
status pop(SqStack &S,Elem &e)
{
if(S.top==S.base) return ERROR;
S.top-=1;
e=*S.top;
return OK;
}
//括号匹配
status  Bracket(SqStack &S,char *str)
{
int i=0,flag1=1,flag2;
Elem e;
while (str[i]!='\0')
{
switch (str[i])
{
case '(': push(S,'(');break;
case '[':push(S,'[');break;
case ')':{
pop(S,e);
if(e!='(')  
flag1= 0;
break; 
}
case ']':{
pop(S,e);
if(e!='[')
flag1=0;
break;
}
default:break;
}
if(!flag1) break;
i++;
}
flag2=StackEmpty(S);
if(flag1 && flag2) printf("括号匹配");
else printf("括号不匹配");
return OK;
}
void main()
{
char temp,flag='y';
while(flag=='y'||flag=='Y')
{
char str[255];
SqStack S;
scanf("%s",str);
getchar();//回收空格
CreatStack(S);
Bracket(S,str);
printf("你想再试一次吗(按y继续): ");
scanf("%c",&flag); 
getchar();
printf("\n");
}
printf("程序结束.\n");
}
【上篇】
【下篇】

抱歉!评论已关闭.