数据结构c++实现----[栈的应用]括号配对
来源:互联网 发布:怎么做微信淘宝优惠卷 编辑:程序博客网 时间:2024/06/07 05:31
我的教材是严蔚敏的那本,所以把上面的一些算法算在数据结构里一起写了
栈 用的是 上一次写的链式栈。。。
代码如下。。
链式栈代码
//head.h
#ifndef HEAD#define HEAD#include<iostream>using namespace std;template<typename T> class LinkStack;template <typename T>class LinkNode{public:friend class LinkStack<T>;LinkNode();LinkNode( const T &elem);//~LinkNode();用不到 private:T data;LinkNode<T> *pPre;LinkNode<T> *pNext;};template <typename T>LinkNode<T>::LinkNode():pPre(NULL),pNext(NULL){//用于初始化头结点,data用不到。}template <typename T>LinkNode<T>::LinkNode( const T &elem):data(elem),pPre(NULL),pNext(NULL){//初始化其余元素}#endif
//linkstack.cpp
#include "head.h"template<typename T> class LinkStack{public:LinkStack();~LinkStack();bool IsEmpty();void Push(const T &data);T Pop();T GetTop();int GetSize();void Clear();private:LinkNode<T> *Top;LinkNode<T> *Base;int Size;};template<typename T> LinkStack<T>::LinkStack():Size( 0 ){Top = new LinkNode<T>;Base = Top;}template<typename T> LinkStack<T>::~LinkStack(){if( ! IsEmpty() ){Clear();}delete Base;}template<typename T> bool LinkStack<T>::IsEmpty(){if( Size == 0 ){return true;}else{return false;}}template<typename T> int LinkStack<T>::GetSize(){return Size;}template<typename T> T LinkStack<T>::GetTop(){return Top->data;}template<typename T> void LinkStack<T>::Push( const T &data){LinkNode<T> *p;p = new LinkNode<T>;p->pPre = Top;p->data = data;Top = p;++Size;}template<typename T> T LinkStack<T>::Pop(){LinkNode<T> *q;q = Top;T data;Top = q->pPre;data = q->data;delete q;--Size;return data;}template<typename T> void LinkStack<T>::Clear(){LinkNode<T> *p;while( Top != Base ){p = Top;Top = p->pPre;delete p;--Size;}}
括号配对代码
//backetpair.cpp
#include "head.h"#include "lstack.cpp"// 没有对 传入字符串是否合法进行判断bool bracketpair( char *p ){char data;LinkStack<char> stack;//对第一个元素进行判断 如果是右括号 返回 false//左括号 压栈 data = *p;if( data == 41 || data == 93 || data == 125 ){return false;}else{stack.Push( data );++p;}while( *p != '\0' ){data = *p;//判断,如果是左括号直接入栈 右括号匹配栈顶if( data == 41 || data == 93 || data == 125 ){//如果与栈顶元素匹配成功则出栈 否则 返回 falseif( stack.GetTop() + 1 == data || stack.GetTop() + 2 == data ) { stack.Pop();p++;}else {return false;}}else{stack.Push( data );}}//判断栈是否为空 可以省略,能够执行到这一句说明一定为真,可以直接返回 trueif( stack.IsEmpty() ){return true;}else{return false;}}
//main.cpp
#include "head.h"//#include "bracketpair.cpp"extern bool bracketpair( char *p ); //加extern关键字防止重复定义int main(){char str[100];cin>>str;if( bracketpair( str ) ){cout<< "ok!"<<endl;}else{cout<<"error!"<<endl;}return 0;}
- 数据结构c++实现----[栈的应用]括号配对
- 数据结构之栈的应用----C程序的括号配对检查
- NYOJ 2 括号配对问题 数据结构栈的应用
- 栈的应用-----括号配对
- 数据结构,栈,括号配对
- 括号配对(栈的应用!)
- NYOJ2括号配对问题( 栈的应用)
- 数据结构(C语言)读书笔记6:栈的应用之括号匹配的C代码实现
- 括号配对-c(栈)
- 括号配对问题 栈实现
- [NYOJ] 02括号配对问题(c语言链栈实现)
- 【数据结构】栈的应用--括号的匹配(c++)
- 一个检查原代码括号配对的程序,栈的应用
- nyoj2括号配对问题(数据结构---栈)
- 基于栈的括号配对
- 顺序表实现括号的配对
- 实现简单的花括号配对问题
- 小白学ACM-括号配对问题(栈实现)
- viewDidUnload,viewDidLoad,viewWillAppear,viewWillDisappear的作用以及区别
- 物联网操作系统Hello China V1.76(PC串口版)版本发布
- pushViewController/presentModalViewController/addSubView区别及使用方法
- SSH框架学习(四、在struts和spring基础上加入hibernate)
- 贵金属及外汇数据单盈利情况(数据单:914.6)(黄金:433.78)(白银:-694)
- 数据结构c++实现----[栈的应用]括号配对
- POJ 2352 Stars
- 黑马程序员--JAVA之反射
- 大数据量并发处理方案
- android笔记(3)--布局
- jsp study 6 函数
- ARM 的FIFO机制,数据缓冲区
- 关于单机最大tcp连接数 及 linux 下 TCP 连接数修改
- Eclipse中添加用户库的方法