-
1查看全部
-
MyStack.h
查看全部 -
栈的类的实现
查看全部 -
额查看全部
-
堆中事例化对象时,类中的构造函数的参数需要有默认值
查看全部 -
析构函数:与构造函数相反,主要在构造函数执行完毕后被自动调用执行善后工作,如释放构造函数开辟的内存,写法与类名相同,前面加~
查看全部 -
出栈和队列都输入引用
查看全部 -
出入栈设为bool类型
查看全部 -
写成0==A容易发现错误
查看全部 -
栈元素查看全部
-
栈是一种机制查看全部
-
一个栈就可以了,首先刚开始要入栈,然后接下来将栈顶元素和待匹配的下一个元素比较,如果相等则出栈,不相等则入栈,一直这样下去,直到字符串结束,最后栈中如果有剩余元素,那么就是不匹配
查看全部 -
int main(void) { MyStack<char> *pStack=new MyStack<char> (30);//用来存放扫描字符串当中所找到的字符 MyStack<char> *pNeedStack=new MyStack<char> (30);//记录栈顶急需的字符 char str[]="[()]]"; char currentNeed=0;//表示当前需要的字符,赋初值用ARIS码 for(int i=0;i<strlen(str);i++) { if(str[i]!=currentNeed) { pStack->push(str[i]); switch(str[i]) { case'[': if(currentNeed!=0) { pNeedStack->push(currentNeed); } currentNeed=']'; break; case'(': if(currentNeed!=0) { pNeedStack->push(currentNeed); } currentNeed=')'; break; default://为了适用于后面有多出来的情况,例如:[()]] cout<<"字符串不匹配"<<endl; return 0; } } else { char elem; pStack->pop(elem); if(!pNeedStack->pop(currentNeed))//判断出栈是否正确,如果栈里没有可pop出的字符就要赋值0 { currentNeed=0; } } } if(pStack->stackEmpty()) { cout<<"字符串括号匹配"<<endl; } else { cout<<"字符串括号不匹配"<<endl; } delete pStack; pStack=NULL; delete pNeedStack; pNeedStack=NULL; return 0; }
查看全部 -
//在MyStack.h中 class MyStack{ public: MyStack(int size); ~MyStack(); bool StackEmpty() const; bool StackFull() const; int StackLength() const;//已有元素个数 void clearStack();//清空栈 bool push(char elem);//入栈 bool pop(char &elem);//出栈,栈顶下降 void StackTraverse(bool isFromBottom); private: char *m_pBuffer;//栈空间指针 int m_iSize; int m_iTop;//栈顶,栈中元素个数 }; //在MyStack.cpp中 #include "MyStack.h" #include <iostream> using namespace std; MyStack::MyStack(int size){ m_iSize=size; m_pBuffer=new char[m_iSize]; m_iTop=0; } MyStack::~MyStack(){ delete []m_pBuffer; m_pBuffer=NULL; } //判断栈空 bool MyStack::StackEmpty() const{ if(0==m_iTop){ return true; } else{ return false; } } //判断栈满 bool MyStack::StackFull() const{ if(m_iTop==m_iSize){ return true; } else{ return false; } } //已有元素个数 int MyStack::StackLength() const{ return m_iTop; } //清空栈 void MyStack::clearStack(){ m_iTop=0; } //入栈 bool MyStack::push(char elem){ if(StackFull()){ return false; } else{ m_pBuffer[m_iTop]=elem; m_iTop++; return true; } } //出栈 bool MyStack::pop(char &elem){ if(StackEmpty()){ return false; } else{ m_iTop--; elem=m_pBuffer[m_iTop]; return true; } } /*出栈还可以这样写,如果返回类型为char char MyStack::pop(){ if(StackEmpty()){ throw 1; } else{ m_iTop--; return m_pBuffer[m_iTop]; } }*/ //遍历 void MyStack::StackTraverse(bool isFromBottom){ //isFromBottom=1,从栈底到顶遍历 if(isFromBottom){ for(int i=0;i<m_iTop;i++){ cout<<m_pBuffer[i]<<","; } } //否则,从栈顶到底遍历 else{ for(int i=m_iTop-1;i>=0;i--){ cout<<m_pBuffer[i]<<","; } } }
查看全部 -
【栈】后进先出Last in First out(LIFO)
查看全部
举报