您的位置:首页 > 其它

第五周项目3--括号的匹配

2017-10-19 10:15 281 查看
/*
Copyright (c++) 2017,烟台大学计算机与控制工程学院
文件名称:sqstack
作 者:宋昊
完成日期:2017年10月18日
版 本 号:12.11
问题描述:定义顺序栈存储结构,实现其基本运算,并完成测试。
输入描述:表达式
输出描述:配对错误/正确
*/
[cpp] view plain copy
#ifndef SQSTACK_H_INCLUDED
#define SQSTACK_H_INCLUDED

#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); //输出栈

#endif // SQSTACK_H_INCLUDED

[cpp] view plain copy
#include <stdio.h>
#include <malloc.h>
#include "sqstack.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");
}

[cpp] view plain copy
//main函数
#include <stdio.h>
#include "sqstack.h"
int main()
{
char c;
char st[50];
int d=1, i;
SqStack *s;
InitStack(s);
printf("请输入表达式:");
scanf("%s", st);
for(i=0; st[i]!='\0'&&d; i++)
{
switch(st[i])
{
case'(':
case'[':
case'{':
Push(s, st[i]);
break;
case')':
Pop(s, c);
if(c!='(') d=0;
break;
case']':
Pop(s, c);
if(c!='[') d=0;
break;
case'}':
Pop(s,c);
if(c!='{') d=0;
break;
}
}
if(StackEmpty(s)&&d==1)
printf("配对正确!!\n");
else
printf("配对错误!!\n");
return 0;
}





知识点:遇到左括号入栈,遇到右括号后,出栈一个符号,看是否配对。若配对,继续,直到读完所有的符号,栈也正好为空。若在中间出现一个不配对的,则可以得出不配对的结论。

学习心得:如果明白栈的先进后出的对称性这个括号问题就很好解答了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: