/*
表达式中的括号是否匹配
*/
bool CLinkSta::IsMatch(DataType* str)
{
if( NULL == str ) return false;
while( m_node )
{
PopLinkStack();
}
CLinkNode* stack1 = NULL;
CLinkNode* stack2 = NULL;
CLinkNode* pNode1 = NULL;
CLinkNode* pNode2 = NULL;
DataType* cTemp = str;
while( *cTemp )
{
if( *cTemp == '(' || *cTemp == '[' || *cTemp == '{' )
{
pNode1 = new CLinkNode;
pNode1->m_Ch = *cTemp;
pNode1->next = stack1;
stack1 = pNode1;
}
else if( *cTemp == ')' || *cTemp == ']' || *cTemp == '}' )
{
pNode2 = new CLinkNode;
pNode2->m_Ch = *cTemp;
pNode2->next = stack2;
stack2 = pNode2;
}
++cTemp;
}
int nCnt = 0;
while( stack1 && stack2 )
{
stack1 = stack1->next;
stack2 = stack2->next;
}
while( stack1 && stack2 )
{
CLinkNode* pTemp1 = stack1;
CLinkNode* pTemp2 = stack2;
stack1 = stack1->next;
stack2 = stack2->next;
DataType ch = pTemp1->m_Ch;
switch( ch )
{
case ')':
ch = '(';
break;
case ']':
ch = '[';
break;
case '}':
ch = '{';
break;
}
if( ch != pTemp2->m_Ch )
{
++nCnt;
break;
}
delete pTemp1;
delete pTemp2;
}
if( !nCnt && !stack1 && !stack2 )
{
return true;
}
else
{
while( stack1 )
{
CLinkNode* pTemp1 = stack1;
stack1 = stack1->next;
delete pTemp1;
}
while( stack2 )
{
CLinkNode* pTemp2 = stack2;
stack2 = stack2->next;
delete pTemp2;
}
while( *str )
{
if( *str == '(' || *str == '[' || *str == '{' )
{
PushLinkStack(*str);
}
else if( *str == ')' || *str == ']' || *str == '}' )
{
if( !m_node )
{
return false;
}
else
{
DataType ch = *str;
switch( ch )
{
case ')':
ch = '(';
break;
case ']':
ch = '[';
break;
case '}':
ch = '{';
break;
}
if( ch != PopLinkStack() )
{
return false;
}
}
}
++str;
}
if( !m_node )
{
return true;
}
}
return false;
}
分享到:
相关推荐
c++使用堆栈实现括号匹配问题
c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题
关于一个括号匹配的练习题,通过对文件的读入,判断此文件内容是否符合{[()]}……对学数据结构有一定的好处。
栈的实现,用链表做的,并且是用C++实现的,以前都是用C语言实现,今天用C++发现原来也是很简单的。
实现插入,创建,删除,等基本操作。 链栈C++源文件 以链式实现栈的算法
C++编程,表达式括号匹配配对问题的实验报告
压缩包内为栈的工程包;工程包括顺序栈、链栈的类的定义与实现;附适当注释;完全面向对象,类封装;测试类中用(纯)虚函数实现多态。
C++实现,识别依次读入的一个以@`为结束符的算术表达式中可以包含三种符号; 圆括号"("和")"、方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套 使用如:…[…{…}…[…]…]…[…]…(…)…)。判别...
本程序包含 栈体:用来保存数据项的内存空间; 栈顶指示器:用来指示栈顶数据项; 栈操作: 压栈操作(push):把数据项从栈顶压入栈内,移动栈顶指示...判断一个数学表达式中的括号(包括圆括号和方括号)是否配对。
任意输入一个由若干个圆括号、方括号和花括号组成字符串,设计一个算法判断该串中的括号是否配对。
c++括号匹配
使用顺序栈实现括号匹配
C++表达式括号匹配题解样例
数据结构~c/c++语言实现括号匹配程序
c++括号匹配算法。zip c++括号匹配算法。zip c++括号匹配算法。zip c++括号匹配算法。zip
用C语言实现表达式的括号匹配。主要是对表达式中的括号进行匹配。思想是用栈的思想进行的。
c++--括号匹配
数据结构中的括号匹配算法的实现,用C++作的
堆栈实现括号匹配问题 ,包括运行结果,自己运行时无错
数据结构(严蔚敏版)P49的括号匹配的代码实现