#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10 //分配不同空间只需要更改此处的值,不需动程序里面的值。
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s){ //初始化栈
s.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char);
if(!s.base) exit(ERROR); //检验是否成功分配空间
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status check(SqStack s){
printf("请输入检验数据(括号):\n");
char c;
c=getchar();
getchar();
switch(c){
case '(' : push(s,c); break;
case '[' : push(s,c); break;
case '{' : push(s,c); break;
case ')' : pop(s,c); if(c == '(') return OK; else return OK; break;
case ']' : pop(s,c); if(c == '[') return OK; else return OK; break;
case '}' : pop(s,c); if(c == '{') return OK; else return OK; break;
default : break;
}//switch
}
Status push(SqStack &s,char e){ //压入栈顶元素
if(s.top-s.base==s.stacksize){
s.base=(char *)realloc(s.base,(STACKINCREMENT+STACK_INIT_SIZE)*sizeof(char));
if(!s.base) exit(0);
s.top=s.base+STACK_INIT_SIZE;
s.stacksize += STACKINCREMENT;
}//if
s.top ++;
e=*s.top;
return OK;
}
Status pop(SqStack &s){ //取出栈顶元素
if(s.top==s.base) return ERROR; //栈S为空
s.top --;
}
int main(int argc, char *argv[]){
SqStack s; //定义栈s
InitStack(s);
check(s);
system("PAUSE");
return 0;
}
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10 //分配不同空间只需要更改此处的值,不需动程序里面的值。
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s){ //初始化栈
s.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char);
if(!s.base) exit(ERROR); //检验是否成功分配空间
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status check(SqStack s){
printf("请输入检验数据(括号):\n");
char c;
c=getchar();
getchar();
switch(c){
case '(' : push(s,c); break;
case '[' : push(s,c); break;
case '{' : push(s,c); break;
case ')' : pop(s,c); if(c == '(') return OK; else return OK; break;
case ']' : pop(s,c); if(c == '[') return OK; else return OK; break;
case '}' : pop(s,c); if(c == '{') return OK; else return OK; break;
default : break;
}//switch
}
Status push(SqStack &s,char e){ //压入栈顶元素
if(s.top-s.base==s.stacksize){
s.base=(char *)realloc(s.base,(STACKINCREMENT+STACK_INIT_SIZE)*sizeof(char));
if(!s.base) exit(0);
s.top=s.base+STACK_INIT_SIZE;
s.stacksize += STACKINCREMENT;
}//if
s.top ++;
e=*s.top;
return OK;
}
Status pop(SqStack &s){ //取出栈顶元素
if(s.top==s.base) return ERROR; //栈S为空
s.top --;
}
int main(int argc, char *argv[]){
SqStack s; //定义栈s
InitStack(s);
check(s);
system("PAUSE");
return 0;
}