
c++ 关于括号匹配问题(在线等!!)
#include<iostream.h>#include<math.h>#include<stdio.h>template<classTelem>classStack{p...
#include <iostream.h>
#include <math.h>
#include <stdio.h>
template <class Telem>
class Stack
{
public:
virtual bool full()=0;
virtual bool empt()=0;
virtual char push(Telem el)=0;
virtual Telem pop()=0;
};
template <class Telem> class LinkStack;
template <class Telem> class Node
{
friend class LinkStack;
public:
Telem data;
Node <Telem>*next;
Node(Telem d=0,Node<Telem>*n=NULL):data(d),next(n){};
};
template<class Telem>
class LinkStack
{
private:
Node <Telem>*top;
public:
LinkStack():top(NULL){};
~LinkStack();
char push(Telem el);
Telem pop();
bool empt(){return top==NULL;}
bool full(){return false;}
char Bracket(Telem el,Telem nn);
};
template <class Telem>char LinkStack<Telem>::push(Telem el)
{
Node<Telem>*p;
p=new Node<Telem>;
p->data=el;
p->next=top;
top=p;
return el;
}
template <class Telem>Telem LinkStack<Telem>::pop()
{
Telem el;
if(top==NULL)return NULL;
else
{
el=top->data;
top=top->next;
return(el);
}
}
template <class Telem> LinkStack<Telem>::~LinkStack()
{
Node<Telem>*p;
while(top!=NULL)
{p=top;top=top->next;delete p;}
}
/*template <class Telem> char LinkStack<Telem>::Bracket(Telem el,Telem nn)
{
int i, flag1=0,flag2;
while(el!='\0'){
switch(el){
case '(':push('(');break; //'('进栈
case '[':push('[');break; //'['进栈
case ')':{pop();
if(el!='(') flag1=1; break;} //出栈,判断是否为'('
case ']':{pop();
if(el!='[') flag1=1;break;} //出栈,判断是否为'['
default: break;
}
if(flag1) break; //出现不匹配,立即结束循环
if(i<nn) i++;
}
flag2=empt(); //flag2判断堆栈是否为空
if(!flag1 && flag2) cout<<"括号匹配!\n";
else cout<<"括号不匹配!\n";
return 1;
}*/
void main()
{
int n;
int i=0, flag1=0,flag2;
char e;
cout<<"shu ru"<<endl;
cin>>n;
LinkStack<char>ls;
........//看上边怎么写了
}
}
/*Bracket(Telem el,Telem nn)只有这个语句中有问题 请高手帮忙改一下 或者重新再做一个括号匹配函数
怎么没人告诉我啊~~~~ 展开
#include <math.h>
#include <stdio.h>
template <class Telem>
class Stack
{
public:
virtual bool full()=0;
virtual bool empt()=0;
virtual char push(Telem el)=0;
virtual Telem pop()=0;
};
template <class Telem> class LinkStack;
template <class Telem> class Node
{
friend class LinkStack;
public:
Telem data;
Node <Telem>*next;
Node(Telem d=0,Node<Telem>*n=NULL):data(d),next(n){};
};
template<class Telem>
class LinkStack
{
private:
Node <Telem>*top;
public:
LinkStack():top(NULL){};
~LinkStack();
char push(Telem el);
Telem pop();
bool empt(){return top==NULL;}
bool full(){return false;}
char Bracket(Telem el,Telem nn);
};
template <class Telem>char LinkStack<Telem>::push(Telem el)
{
Node<Telem>*p;
p=new Node<Telem>;
p->data=el;
p->next=top;
top=p;
return el;
}
template <class Telem>Telem LinkStack<Telem>::pop()
{
Telem el;
if(top==NULL)return NULL;
else
{
el=top->data;
top=top->next;
return(el);
}
}
template <class Telem> LinkStack<Telem>::~LinkStack()
{
Node<Telem>*p;
while(top!=NULL)
{p=top;top=top->next;delete p;}
}
/*template <class Telem> char LinkStack<Telem>::Bracket(Telem el,Telem nn)
{
int i, flag1=0,flag2;
while(el!='\0'){
switch(el){
case '(':push('(');break; //'('进栈
case '[':push('[');break; //'['进栈
case ')':{pop();
if(el!='(') flag1=1; break;} //出栈,判断是否为'('
case ']':{pop();
if(el!='[') flag1=1;break;} //出栈,判断是否为'['
default: break;
}
if(flag1) break; //出现不匹配,立即结束循环
if(i<nn) i++;
}
flag2=empt(); //flag2判断堆栈是否为空
if(!flag1 && flag2) cout<<"括号匹配!\n";
else cout<<"括号不匹配!\n";
return 1;
}*/
void main()
{
int n;
int i=0, flag1=0,flag2;
char e;
cout<<"shu ru"<<endl;
cin>>n;
LinkStack<char>ls;
........//看上边怎么写了
}
}
/*Bracket(Telem el,Telem nn)只有这个语句中有问题 请高手帮忙改一下 或者重新再做一个括号匹配函数
怎么没人告诉我啊~~~~ 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询