栈,括号匹配c语言
#include "stdio.h"
#include"stdlib.h"
#include "malloc.h"
#define OK 1
#define OVERFLOW -1
#define ERROR 0
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char ElemType; typedef int Status;
typedef struct //构造 {
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
//
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
声明部分
Status InitStack(SqStack &S); //创建 Status EmpyStack(SqStack S); //检查栈是否为空 Status Push(SqStack &S,ElemType e); //入栈 Status Pop(SqStack &S,ElemType &e); //出栈 Status GetTop(SqStack S,ElemType &e); //返回栈顶元素 Status StackLength(SqStack S); //计算栈的长度 void Brackets(); //括号匹配 Status Putin(SqStack &S); //输入 Status Print(SqStack &S); //输出
//函数
Status InitStack(SqStack &S) //创建 {
S.base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!S.base)
exit(OVERFLOW); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK; //存储分配成功
}
Status EmpyStack(SqStack S) //检查栈是否为空 {
if(S.base==S.top)
return 1;
else
return 0;
}
Status Push(SqStack &S,ElemType e) //入栈 {
if(S.top-S.base>=S.stacksize)
{
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) *
sizeof(ElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,ElemType &e) //出栈 {
if(EmpyStack(S))
return ERROR;
--S.top;
e=*S.top;
return OK;
}
Status GetTop(SqStack S,ElemType &e) //返回栈顶元素 {
if(EmpyStack(S))
return ERROR;
e=*(S.top-1);
printf("\n栈顶元素是:%c",e);
return OK;
}
Status Putin(SqStack &S) //输入 {
char *q;
char ch[100];
q=ch;
printf("\n按顺序输入元素:");
gets(ch);
int i=0;
while(*q)
{
Push(S,*q++);
}
}
int StackLength(SqStack S) //计算长度 {
if(EmpyStack(S))
return ERROR;
else
return (S.top-S.base);
}
void Brackets() //括号匹配 {
SqStack M; //初始化空栈
InitStack(M);
getchar();
char ch[100];
for(int i=0;i<100;i++)
ch[i]='\0';
char *p;
char e;
p=ch;
printf("\n输一个含括号的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式:\n");
gets(ch);
while(*p)
{
switch (*p)
{
case '{':
case '[':
case '(':
Push(M,*p++);
break; //只要是左括号就入栈
case '}':
case ']':
case ')':
Pop(M,e);
if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))
p++;
else
{
printf("括号不匹配!");
exit(OVERFLOW);
}
break;
default :
p++;
}
}
if (EmpyStack(M))
printf("括号匹配成功");
else
printf("缺少右括号~");
printf("\n"); }
Status Print(SqStack &S) //输出
{
SqStack Q;
InitStack(Q);
ElemType x;
printf("\n此栈为:");
while(S.top!=S.base)
{
Pop(S,x);
printf("%c ",x);
Push(Q,x);
}
while(!EmpyStack(Q))
{
Pop(Q,x);
Push(S,x);
}
return OK;
}
int main()
{
char e;
SqStack S;
InitStack(S);
printf("创建一个栈\n");
Putin(S);
Print(S);
GetTop(S,e);
printf("\n括号匹配检验\n");
Brackets();
getchar();
return 0;
}