*Copyright (c)2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:括号.cpp
*作 者:林颖
*完成日期:2016年9月25日
*问题描述:假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配。。
*输入描述:若干数据。
*程序输出:根据括号的配对情况输出配对正确或配对错误。
*/
head.h的部分
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈指针
} SqStack; //顺序栈类型定义
void InitStack(SqStack *&s); //初始化栈
void DestroyStack(SqStack *&s); //销毁栈
bool StackEmpty(SqStack *s); //栈是否为空
int StackLength(SqStack *s); //返回栈中元素个数——栈长度
bool Push(SqStack *&s,ElemType e); //入栈
bool Pop(SqStack *&s,ElemType &e); //出栈
bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素
void DispStack(SqStack *s); //输出栈
head.cpp的部分
#include <stdio.h>
#include <malloc.h>
#include "head.h"
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
void DestroyStack(SqStack *&s)
{
free(s);
}
int StackLength(SqStack *s) //返回栈中元素个数——栈长度
{
return(s->top+1);
}
bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e)
{
if (s->top==MaxSize-1) //栈满的情况,即栈上溢出
return false;
s->top++;
s->data[s->top]=e;
return true;
}
bool Pop(SqStack *&s,ElemType &e)
{
if (s->top==-1) //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top];
s->top--;
return true;
}
bool GetTop(SqStack *s,ElemType &e)
{
if (s->top==-1) //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top];
return true;
}
void DispStack(SqStack *s) //输出栈
{
int i;
for (i=s->top;i>=0;i--)
printf("%c ",s->data[i]);
printf("\n");
}
#include"stdio.h"
#include "head.h"
int main()
{
char s[50];
printf("请输入表达式:");
scanf("%s", s);
if(peidui(s))
printf("配对正确!!\n");
else
printf("配对错误!!\n");
return 0;
}
bool peidui(char*s)
{
int i=0,d=1;
LiStack *a;
InitStack(a);
char c;
while(s[i]!='\0')
{
switch(s[i])
{
case'(':
case'[':
case'{':
Push(a,s[i]);
break;
case')':
Pop(a,c);
if(c!='(')
d=0;
break;
case']':
Pop(a,c);
if(c!='[')
d=0;
break;
case'}':
Pop(a,c);
if(c!='{')
d=0;
break;
}
i++;
}
if(StackEmpty(a)&&d==1)
{
return true;
}
else return false;
}
运行结果
正确的运行结果
错误的运行结果
知识点总结
栈的应用
学习心得
刚开始敲这些代码,根本记不下来,必须得参考着课本,不过熟能生巧,敲的多了也就记下来了。