相信学过数据结构的都晓得这个经典问题:括号匹配吧。废话不多少了,看代码吧 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; } 比较简单的实现了一下,主要是链式栈的模板类的实现,这个有些重要。