正在加载小宠物
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝 \n
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

数据结构利用栈测试括号是否匹配C语言代码

本来测试一下新装的VS2010是否好用,顺便开始我的数据结构之旅,虽然很早就想开始弄这些东西 了,但是因为电脑坏了,所以一直拖到现在 ,下面是刚刚写的利用栈匹配括号的 代码,代码可能有错误,我只是看了一下需要做什么工作,然后就自己写了,简单的测试了一下,测试的结果正确,所以分享给大家,如果存在错误,欢迎大家留言指正。 #include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100  /*栈的大小*/ #define STACKINCREMENT 10  /*增长的大小*/ #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef char SElemType; typedef int Status; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; /*初始化一个栈*/ Status InitStack(SqStack *S){ /*构造一个空栈S*/ S->base=(SElemType *)malloc(sizeof(SElemType)*STACK_INIT_SIZE);//这里的S是一个指针 所以应该用-> if(!S->base){return ERROR;} S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } /*获取栈顶元素*/ Status GetTop(SqStack S,SElemType *e){ if(S.base==S.top){//这里的S是一个结构体所以应该用. return(OVERFLOW); } *e = *(S.top-1); return OK; } /*销毁栈*/ Status DestoryStack(SqStack *S){ free(S->base); S->top=""; S->stacksize=0; S->base=""; } /*清空栈*/ Status ClearStack(SqStack *S){ S->top=S->base; } /*判断栈是否为空*/ Status StackEmpty(SqStack S){ if(S.base==S.top){ return TRUE; } return FALSE; } /*返回一个栈的长度*/ int StackLen(SqStack *S){ if(!S)return OVERFLOW; return S->top-S->base; } /*压栈函数*/ Status Push(SqStack *S,SElemType e){ if(S->top-S->base>=S->stacksize){ S->base=(SElemType *)realloc(S->base,sizeof(SElemType)*(STACKINCREMENT+S->stacksize)); if(!S->base)return OVERFLOW; } *S->top++= e; } /*出栈函数*/ Status Pop(SqStack *S,SElemType *e){ if(S->top>S->base ){ *e=*(--S->top); return OK; }return ERROR; } /*判断栈是否已满*/ Status IsFull(SqStack s){ if(s.top>s.base+s.stacksize){ return TRUE; } return FALSE; } /*判断栈是否为空栈*/ Status IsEmpty(SqStack s){ if(s.top == s.base){ return TRUE; } return FALSE; } /*遍历执行函数visit*/ Status StackTraverse(SqStack *S,Status(*visit)()){ while(S->top!=S->base){ visit(S->top--); } } /*判断括号是否匹配*/ Status BracketMatch(char *p){ int i; char temp; SqStack s; InitStack(&s); for(i=0;p[i]!='\0';i++){ switch(p[i]){ case '{': case '[': case '(': if(!IsFull(s))Push(&s,p[i]);else exit(0); break; case '}': if(IsEmpty(s)){ printf("括号不匹配!"); return 0; } GetTop(s,&temp); if(temp!='{'){ printf("括号不匹配!"); return OK; } Pop(&s,&temp); break; case ']': if(IsEmpty(s)){ printf("括号不匹配!"); return 0; } GetTop(s,&temp); if(temp!='['){ printf("括号不匹配!"); return OK; } Pop(&s,&temp); break; case ')': if(IsEmpty(s)){ printf("括号不匹配!"); return 0; } GetTop(s,&temp); if(temp!='('){ printf("括号不匹配!"); return OK; } Pop(&s,&temp); break; default: printf("你在逗我??!!"); return OK; } } printf("匹配成功!"); } int main(){ char temp[100]; printf("请输入您要匹配的括号:"); scanf("%s",&temp); BracketMatch(&temp); system("pause"); }
2015-07-20
暂无评论

发表回复