您的位置:首页 > 理论基础 > 数据结构算法

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

2016-09-25 09:32 435 查看
/*       

*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;  

}

运行结果

正确的运行结果



错误的运行结果



知识点总结

  栈的应用

学习心得

   刚开始敲这些代码,根本记不下来,必须得参考着课本,不过熟能生巧,敲的多了也就记下来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息