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

来源:互联网 发布:vagaa哇嘎画时代 mac 编辑:程序博客网 时间:2024/05/15 21:03
/*       
*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;  
}

运行结果

正确的运行结果


错误的运行结果


知识点总结

  栈的应用

学习心得

   刚开始敲这些代码,根本记不下来,必须得参考着课本,不过熟能生巧,敲的多了也就记下来了。

0 0
原创粉丝点击