博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实用栈检查括号是否匹配
阅读量:6146 次
发布时间:2019-06-21

本文共 1593 字,大约阅读时间需要 5 分钟。

设字符串仅由圆括号“(”和“)”,方括号“[”和“]”,花括号“{

”和“}”组成,利用链栈的操作编写一个检查括号是否正确配对的算法:int Matcher(LstackTP *ls)。例如[{
{
()}[ ]}(){[ ]}]是正确的,而{
{
()[ ]}}]}则不正确。设链栈定义如下:(6分)

typedef struct node

{   char data;

struct node * next;

} LStackTp

 

//
 Stack.cpp : Defines the entry point for the console application.
//
#include 
"
stdafx.h
"
#include 
"
stdlib.h
"
typedef 
struct node
{
    
char data;
    
struct  node * next;
}LStackTp;
void InitStack(LStackTp **ls)
{
    *ls=NULL;
}
void Push(LStackTp **ls,
char x)
{
    LStackTp *p;
    p=(LStackTp *)malloc(
sizeof(LStackTp));
    p->data=x;
    p->next=*ls;
    *ls=p;
}
int Pop(LStackTp **ls,
char *x)
{
    LStackTp *p;
    
if (*ls!=NULL)
    {
        p=*ls;
        *x=p->data;
        *ls=p->next;
        free(p);
        
return 
1;
    
    }
        
return 
0;
}
int EmptyStack(LStackTp *ls)
{
    
return (ls==NULL);
}
char GetStackTop(LStackTp *ls)
{
    
if (ls)
        
return ls->data;
    
else
        
return 
'
\0
';
}
void PrintStack(LStackTp **ls)
{
        LStackTp *p;
        p=*ls;
        
while (p)
        {
            printf(
"
%c \n
",p->data);
            p=p->next;    
        
        }
}
int MyMatcher(
char ch1,
char ch2)
{
    
if ((ch1==
'
(
') && (ch2==
'
)
')) 
return 
1;
    
if ((ch1==
'
[
') && (ch2==
'
]
')) 
return 
1;
    
if ((ch1==
'
{
') && (ch2==
'
}
')) 
return 
1;
    
return 
0;
}
int Matcher(LStackTp **ls,
char *p)
{
    
char ch;
    
char *x=&ch;
    
while (*p)
    {
        
if ( MyMatcher(GetStackTop(*ls),(*p) ))
        {        
            Pop(ls,x);            
        }
        
else
        {
            Push(ls,*p);
        }        
            p++;    
    }
    
return EmptyStack(*ls);
}
int main(
int argc, 
char* argv[])
{
    LStackTp *S;
    InitStack(&S);
    
char *p=
"
(()){}[]{
{}({})}({[()]})
";
    
if (Matcher(&S,p))
        printf(
"
这是一个合法的括号序列!
");
    
else
        printf(
"
这是一个不合法的括号序列!
");
    printf(
"
\n\n\n\n\n
");
    
return 
0;

} 

转载于:https://www.cnblogs.com/lance2088/archive/2011/09/27/2192726.html

你可能感兴趣的文章
三栏布局总结
查看>>
前端自动化解决方案
查看>>
js中的正则表达式入门
查看>>
关于.NET Core是否应该支持WCF Hosting的争论
查看>>
ArchSummit2018深圳站筹备中,18大专题征集演讲嘉宾
查看>>
现代化敏捷简介
查看>>
Mozilla开发全新的公开网络API WebXR 来实现增强现实
查看>>
使用Gradle第一次构建Java程序
查看>>
红帽OpenShift总经理谈容器技术需要关注的方向
查看>>
Git漏洞导致攻击者可在用户电脑上运行任意代码
查看>>
没有一个技术天生完美,MongoDB十年发展全纪录
查看>>
2019 SRE 调查报告:事故处理是主要工作,SRE 压力山大
查看>>
OPPO大数据平台运营研发实践分享
查看>>
强化学习遭遇瓶颈!分层RL将成为突破的希望
查看>>
Adaptive Execution让Spark SQL更高效更好用
查看>>
宕机的阿里云们正在杀死运维?
查看>>
使用Prometheus监控Cloudflare的全球网络
查看>>
腾讯58篇论文入选CVPR 2019,涵盖视觉对抗学习等方向
查看>>
百度贴吧爬虫node+vue baidu_tieba_crawler
查看>>
笨方法使用Kubernetes实现持续交付
查看>>