-
1查看全部
-
MyStack.h
查看全部 -
棧的類的實現(xiàn)
查看全部 -
額查看全部
-
堆中事例化對象時,類中的構造函數(shù)的參數(shù)需要有默認值
查看全部 -
析構函數(shù):與構造函數(shù)相反,主要在構造函數(shù)執(zhí)行完畢后被自動調用執(zhí)行善后工作,如釋放構造函數(shù)開辟的內存,寫法與類名相同,前面加~
查看全部 -
出棧和隊列都輸入引用
查看全部 -
出入棧設為bool類型
查看全部 -
寫成0==A容易發(fā)現(xiàn)錯誤
查看全部 -
棧元素查看全部
-
棧是一種機制查看全部
-
一個棧就可以了,首先剛開始要入棧,然后接下來將棧頂元素和待匹配的下一個元素比較,如果相等則出棧,不相等則入棧,一直這樣下去,直到字符串結束,最后棧中如果有剩余元素,那么就是不匹配
查看全部 -
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;//已有元素個數(shù) ????void?clearStack();//清空棧 ????bool?push(char?elem);//入棧 ????bool?pop(char?&elem);//出棧,棧頂下降 ????void?StackTraverse(bool?isFromBottom); private: ????char?*m_pBuffer;//??臻g指針 ????int?m_iSize; ????int?m_iTop;//棧頂,棧中元素個數(shù) }; //在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; ????} } //已有元素個數(shù) 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]<<","; ????????} ????} ????//否則,從棧頂?shù)降妆闅v ????else{ ????????for(int?i=m_iTop-1;i>=0;i--){ ????????????cout<<m_pBuffer[i]<<","; ????????} ????} }
查看全部 -
【棧】后進先出Last in First out(LIFO)
查看全部
舉報