第1个回答 2013-11-28
//Com.h
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define Status int
#define ElemType int
#define TRUE 1
#define FALSE 0
#define SElemType char
//SqStack.h
#include "Com.h"
#include <stdlib.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
SElemType *base;
SElemType *top;
ElemType stacksize;
}SqStack;
Status Initstack(SqStack &L)//建栈
{
L.base=(SElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
if(!L.base)
exit(OVERFLOW);
L.top=L.base;
L.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Gettop(SqStack L,SElemType &e)// 取栈顶元素
{
if(L.top==L.base)
return ERROR;
e = *(L.top-1);
return OK;
}
Status Push(SqStack &L,SElemType &e)//添加元素
{
if(L.top - L.base==STACK_INIT_SIZE)
{
L.base = (SElemType*)realloc(L.base,(L.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!L.base)
exit(OVERFLOW);
L.top = L.base + L.stacksize;
L.stacksize += STACKINCREMENT;
}
*L.top++ = e;
return OK;
}
Status Pop(SqStack &L, SElemType &e)//弹出元素
{
if(L.top == L.base)
return ERROR;
e = *(--L.top);
return OK;
}
Status DestroyStack(SqStack &L)//销毁栈
{
L.top = L.base;
return OK;
}
Status ClearStack(SqStack &L)
{
if(L.top == L.base)
printf("All Done!");
*L.base++ = NULL;
return OK;
}
Status StackEmpty(SqStack &L)
{
if(L.top == L.base)
return TRUE;
else
return FALSE;
}
Status StackLength(SqStack &L)
{
return (L.top-L.base);
}
//match-stack.cpp
#include "stdafx.h"
#include "SqStack.h"
#include <stdio.h>
#define ARRAYSIZE 20
int main()
{
char arr[ARRAYSIZE];
printf("Input your shizi:");
scanf("%s",arr);
SqStack S;
Initstack(S);
int i ;
for(i = 0;i < ARRAYSIZE; i++)
{
if(arr[i] == '(' || arr[i] == '['||arr[i] =='{')
Push(S,arr[i]);
else if(arr[i] == ')' || arr[i] == ']'||arr[i] == '}')
{
if(S.top == S.base)
{
printf("Input error!");
exit(0);
}
else
Pop(S,*(S.top-1));
}
}
if(StackEmpty(S))
printf("Match!");
else
printf("Not Match!");
return 0;
}本回答被网友采纳