用C++链式栈解决数据结构中的括号匹配问题。
2010-10-22 13:18
471 查看
相信学过数据结构的都晓得这个经典问题:括号匹配吧。废话不多少了,看代码吧
LinkStack.h
主函数如下:
比较简单的实现了一下,主要是链式栈的模板类的实现,这个有些重要。
LinkStack.h
#include<stdio.h> template<class T> class LinkStackNode { public: T data; LinkStackNode<T> *link; LinkStackNode(T& value):link(NULL),data(value){} }; template<class T> class LinkStack { LinkStackNode<T> *tos; public: LinkStack():tos(NULL){} void push(T& value); T pop(); T& GetTop(); bool IsEmpty(); void MakeEmpty(); }; template<class T> void LinkStack<T>::push(T& value) { LinkStackNode<T>* add=new LinkStackNode<T>(value); add->link=tos; tos=add; } template<class T> T LinkStack<T>::pop() { //assert(tos!=NULL); LinkStackNode<T>* old=tos; tos=tos->link; T data=old->data; delete old; return data; } template<class T> T& LinkStack<T>::GetTop() { return tos->data; } template<class T> bool LinkStack<T>::IsEmpty() { return tos==NULL; } template<class T> void LinkStack<T>::MakeEmpty() { //while(tos!= NULL) // pop(); while(!this->IsEmpty()) { this->pop(); } }
主函数如下:
#include<iostream> #include<stdio.h> #include<assert.h> #include "LinkStack.h" using namespace std; int main() { cout<<"输入括号序列(以0结束):"; LinkStack<char> small; char a; do { cin>>a; switch(a) { case '(': small.push(a); break; case ')': if(!small.IsEmpty()) { small.pop(); break; } if(small.IsEmpty()) { cout<<"Wrong!"<<endl; exit(0); break; } } }while(a!='0'); if(small.IsEmpty()) { cout<<"OK!"<<endl; } else cout<<"Wrong!"<<endl; return 0; }
比较简单的实现了一下,主要是链式栈的模板类的实现,这个有些重要。
相关文章推荐
- [C++]连续最长括号匹配问题解决策略二(学习)
- 数据结构(八) 用顺序栈解决括号匹配的问题
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。
- 数据结构(18)栈典型问题之C++实现括号匹配
- [C++]连续最长括号匹配问题解决策略二(学习)
- c++ 数据结构 用递归方法解决迷宫问题
- c++ 数据结构 用循环单链表解决约瑟夫问题
- 未解决问题之一—— fatal error C1075: 与左侧的 大括号“{”(位于“”)匹配之前遇到文件结束
- 关于使用栈解决括号匹配的问题
- 【数据结构】 利用栈求解 括号匹配问题
- 数据结构题典021:栈的应用——括号匹配的检验(C++)
- 栈操作解决括号匹配问题
- 用栈的链式存储结构来解决括号匹配问题
- [C++]连续最长括号匹配问题
- 栈用于解决括号匹配问题
- 【面试题】用栈解决括号匹配问题
- 数据结构-----栈实现括号匹配问题
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
- 数据结构之括号匹配问题
- 括号匹配问题(C++、堆栈)