栈的C++实现及用于括号匹配
2008-10-29 22:21
393 查看
顺序栈的C++ 代码实现:
const int STACK_INIT_SIZE=6;//存储空间初始分配量
const int STACK_INCREMENT=10;//存储空间分配增量
template<class T>
class SeqStack
{//顺序栈
//friend ostream operator<<(ostream& out,const SeqStack& ss);//重载输出操作符
public:
SeqStack();
void ClearStack();//清空栈
bool StackEmpty();//判断栈是否为空
int StackLength();//栈的长度
bool GetTop(T& elem);//返回栈顶元素
void Push(T elem);//元素入栈
bool pop(T& elem);//栈顶元素出栈
~SeqStack();
private:
T *base;//栈底指针
T* top;//栈顶指针
int stacksize;//当前已分配的存储空间
};
template<class T>
SeqStack<T>::SeqStack()
{
base=new T[STACK_INIT_SIZE];
top=base;
stacksize=STACK_INIT_SIZE;
}
template<class T>
SeqStack<T>::~SeqStack()
{
delete[] base;
base=0;
top=0;
stacksize=0;
}
template<class T>
void SeqStack<T>::ClearStack()
{
top=base;
}
template<class T>
bool SeqStack<T>::StackEmpty()
{
if(top==base) return true;
else return false;
}
template<class T>
int SeqStack<T>::StackLength()
{
return top-base;
}
template<class T>
bool SeqStack<T>::GetTop(T &elem)
{
if(!StackEmpty())
{
elem=*(top-1);
return true;
}
else
return false;
}
template<class T>
void SeqStack<T>::Push(T elem)
{
if(top-base>=stacksize)
{//栈满,追加存储空间
SeqStack<T> seq;
T elem;
while(this->pop(elem))
{
seq.Push(elem);
}
base=new T[STACK_INIT_SIZE+STACK_INCREMENT];
top=base;
while(seq.pop(elem))
{
this->Push(elem);
}
}
*(top++)=elem;
}
template<class T>
bool SeqStack<T>::pop(T& elem)
{
if(StackEmpty())
{
return false;
}
else
{
elem=*(--top);
return true;
}
}
栈的应用之一:(括号匹配)
SeqStack<char> seq;
string expression;
char tmp,elem;
bool exit=false;
cout<<"输入表达式:";
cin>>expression;
cout<<endl<<"输入的表达式是:"<<expression<<endl;
int i=0;
while(i<expression.length())
{
if(!exit)
{
tmp=expression[i];
switch(tmp)
{
case '(':
case '[':
seq.Push(tmp);
break;
case ')':
if(seq.GetTop(elem))
{
if(elem=='(')
seq.pop(elem);
else
{
exit=true;
}
}
else
exit=true;
break;
case ']':
if(seq.GetTop(elem))
{
if(elem=='[')
seq.pop(elem);
else
{
exit=true;
}
}
else
exit=true;
break;
}
i++;
}
else
{
cout<<"不匹配"<<endl;
break;
}
}
if(!exit)
cout<<"匹配成功!"<<endl;
const int STACK_INIT_SIZE=6;//存储空间初始分配量
const int STACK_INCREMENT=10;//存储空间分配增量
template<class T>
class SeqStack
{//顺序栈
//friend ostream operator<<(ostream& out,const SeqStack& ss);//重载输出操作符
public:
SeqStack();
void ClearStack();//清空栈
bool StackEmpty();//判断栈是否为空
int StackLength();//栈的长度
bool GetTop(T& elem);//返回栈顶元素
void Push(T elem);//元素入栈
bool pop(T& elem);//栈顶元素出栈
~SeqStack();
private:
T *base;//栈底指针
T* top;//栈顶指针
int stacksize;//当前已分配的存储空间
};
template<class T>
SeqStack<T>::SeqStack()
{
base=new T[STACK_INIT_SIZE];
top=base;
stacksize=STACK_INIT_SIZE;
}
template<class T>
SeqStack<T>::~SeqStack()
{
delete[] base;
base=0;
top=0;
stacksize=0;
}
template<class T>
void SeqStack<T>::ClearStack()
{
top=base;
}
template<class T>
bool SeqStack<T>::StackEmpty()
{
if(top==base) return true;
else return false;
}
template<class T>
int SeqStack<T>::StackLength()
{
return top-base;
}
template<class T>
bool SeqStack<T>::GetTop(T &elem)
{
if(!StackEmpty())
{
elem=*(top-1);
return true;
}
else
return false;
}
template<class T>
void SeqStack<T>::Push(T elem)
{
if(top-base>=stacksize)
{//栈满,追加存储空间
SeqStack<T> seq;
T elem;
while(this->pop(elem))
{
seq.Push(elem);
}
base=new T[STACK_INIT_SIZE+STACK_INCREMENT];
top=base;
while(seq.pop(elem))
{
this->Push(elem);
}
}
*(top++)=elem;
}
template<class T>
bool SeqStack<T>::pop(T& elem)
{
if(StackEmpty())
{
return false;
}
else
{
elem=*(--top);
return true;
}
}
栈的应用之一:(括号匹配)
SeqStack<char> seq;
string expression;
char tmp,elem;
bool exit=false;
cout<<"输入表达式:";
cin>>expression;
cout<<endl<<"输入的表达式是:"<<expression<<endl;
int i=0;
while(i<expression.length())
{
if(!exit)
{
tmp=expression[i];
switch(tmp)
{
case '(':
case '[':
seq.Push(tmp);
break;
case ')':
if(seq.GetTop(elem))
{
if(elem=='(')
seq.pop(elem);
else
{
exit=true;
}
}
else
exit=true;
break;
case ']':
if(seq.GetTop(elem))
{
if(elem=='[')
seq.pop(elem);
else
{
exit=true;
}
}
else
exit=true;
break;
}
i++;
}
else
{
cout<<"不匹配"<<endl;
break;
}
}
if(!exit)
cout<<"匹配成功!"<<endl;
相关文章推荐
- 数据结构(18)栈典型问题之C++实现括号匹配
- ACM--括号匹配C++实现
- 括号匹配简易C++实现
- C++与Java之括号匹配(栈实现)
- 算法学习 - 括号匹配(栈实现)C++
- C++实现算术表达式的括号匹配
- C/C++数据结构通过顺序栈实现括号()匹配算法
- 括号匹配算法的C++代码实现
- Python实现的括号匹配判断功能示例
- 控制台下实现简单的文本菜单及一般题目的主框架(可用于C/C++、特别是数据结构实验)
- 栈的顺序实现以及括号匹配判断程序
- Win32下两种用于C++的线程同步类(多线程实现加锁解锁)
- 8、数据结构笔记之八栈的应用之括号匹配检验实现
- 用栈实现括号匹配的检验
- JS简单实现括号匹配问题
- 利用C语言中后进先出的栈的概念实现括号匹配
- 判断表达式括号是否匹配,C语言堆栈实现
- 数据结构-----栈实现括号匹配问题
- 算法复习--------------利用堆栈实现括号匹配
- 用链栈实现字符串表达式括号匹配算法