ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2018 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