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

1.头文件:sqstack.h,包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;


[cpp] view plaincopyprint?
01.#define MaxSize 100   
02.typedef char ElemType;  
03.typedef struct  
04.{  
05.    ElemType data[MaxSize];  
06.    int top;                //栈指针   
07.} SqStack;                  //顺序栈类型定义   
08.  
09.void InitStack(SqStack *&s);    //初始化栈   
10.void DestroyStack(SqStack *&s);  //销毁栈   
11.bool StackEmpty(SqStack *s);     //栈是否为空   
12.int StackLength(SqStack *s);  //返回栈中元素个数——栈长度   
13.bool Push(SqStack *&s,ElemType e); //入栈   
14.bool Pop(SqStack *&s,ElemType &e); //出栈   
15.bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素   
16.void DispStack(SqStack *s);  //输出栈  
#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);  //输出栈
2.源文件:sqstack.cpp,包含实现各种算法的函数的定义


[cpp] view plaincopyprint?
01.#include <stdio.h>   
02.#include <malloc.h>   
03.#include "sqstack.h"   
04.  
05.void InitStack(SqStack *&s)  
06.{  
07.    s=(SqStack *)malloc(sizeof(SqStack));  
08.    s->top=-1;  
09.}  
10.void DestroyStack(SqStack *&s)  
11.{  
12.    free(s);  
13.}  
14.int StackLength(SqStack *s)  //返回栈中元素个数——栈长度   
15.{  
16.    return(s->top+1);  
17.}  
18.bool StackEmpty(SqStack *s)  
19.{  
20.    return(s->top==-1);  
21.}  
22.bool Push(SqStack *&s,ElemType e)  
23.{  
24.    if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出   
25.        return false;  
26.    s->top++;  
27.    s->data[s->top]=e;  
28.    return true;  
29.}  
30.bool Pop(SqStack *&s,ElemType &e)  
31.{  
32.    if (s->top==-1)     //栈为空的情况,即栈下溢出   
33.        return false;  
34.    e=s->data[s->top];  
35.    s->top--;  
36.    return true;  
37.}  
38.bool GetTop(SqStack *s,ElemType &e)  
39.{  
40.    if (s->top==-1)         //栈为空的情况,即栈下溢出   
41.        return false;  
42.    e=s->data[s->top];  
43.    return true;  
44.}  
45.  
46.void DispStack(SqStack *s)  //输出栈   
47.{  
48.    int i;  
49.    for (i=s->top;i>=0;i--)  
50.        printf("%c ",s->data[i]);  
51.    printf("\n");  
52.}  
#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");
}

3.主函数


01.#include <stdio.h>   
02.#include "sqstack.h"   
03.int main()  
04.{  
05.    char c;  
06.    char st[50];  
07.    int d=1, i;  
08.    SqStack *s;  
09.    InitStack(s);  
10.    printf("请输入表达式:");  
11.    scanf("%s", st);  
12.    for(i=0; st[i]!='\0'&&d; i++)  
13.    {  
14.        switch(st[i])  
15.        {  
16.        case'(':  
17.        case'[':  
18.        case'{':  
19.            Push(s, st[i]);  
20.            break;  
21.        case')':  
22.            Pop(s, c);  
23.            if(c!='(') d=0;  
24.            break;  
25.        case']':  
26.            Pop(s, c);  
27.            if(c!='[') d=0;  
28.            break;  
29.        case'}':  
30.            Pop(s,c);  
31.            if(c!='{') d=0;  
32.            break;  
33.        }  
34.    }  
35.    if(StackEmpty(s)&&d==1)  
36.        printf("配对正确!!\n");  
37.    else  
38.        printf("配对错误!!\n");  
39.    return 0;  
40.}  


运行结果:

学习心得:

很长时间才调试出来,不过最后还是明白了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值