您的位置:首页 > 其它

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

2016-10-09 11:03 85 查看
/*

*Copyright (c)2016,烟台大学计算机学院

*All rights reserved.

*文件名称:传写.cpp

*作者:李欣

*完成日期:2016年10月9日

*版本号:v1.0

*

*问题描述:假设表达式中允许三种括号:圆括号、方括号、大括号,编写一个算法,判断表达式中的各种左括号是否与右括号匹配。

*输入描述:带括号表达式

*输出描述:匹配正确还是错误

*/

main.cpp
#include <stdio.h>

#include "sqstack.h"

int main()

{

char c;

char st[50];

int d=1, i; //d记录左右括号是否匹配 d=1匹配 ,d=0不匹配

SqStack *s;

InitStack(s); //初始化一个栈

printf("请输入表达式:");

scanf("%s", st);

for(i=0; st[i]!='\0'&&d==1; 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;

}

sqstack.cpp

#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");

}

sqstack.h

#ifndef SQSTACK_H_INCLUDED

#define SQSTACK_H_INCLUDED

#include <stdio.h>

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

#endif // SQSTACK_H_INCLUDED1

运行结果;



知识点总结:

出栈和入栈

学习心得:

很方便用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: