-
說實話,在棧中加一個取棧頂元素會更友好
查看全部 -
default
查看全部 -
類模板
運算符重載
查看全部 -
出棧傳入的是引用的好處:
使用這個函數(shù)的時候,傳入?yún)?shù)可以是一個變量,這個變量可以把傳給他的值取出
執(zhí)行入棧操作,把元素存入棧頂,棧頂指針++以后指向了一個空位置(下一個元素要入棧的位置)所以入棧先復制再++操作
入棧操作后做出棧操作,要先把棧頂指針--指向有元素的位置,再把棧頂元素賦值給變量 ,達到了棧高度度下降,并且返回了一個值
查看全部 -
修改后:
#include?<iostream> #include?<stdlib.h> #include?"MyStack.h" #include?<algorithm> #include?<string> using?namespace?std; //用棧進行括號匹配 int?main(void) { ????//定義兩個棧 ????MyStack?*pStack?=?new?MyStack(30);//用于存放輸入字符串的字符 ????MyStack?*pNeedStack?=?new?MyStack(30);//用于存放棧頂急需匹配的字符 ????char?str[]?=?"[()]"; ????char?currentNeed?=?0; ????for(int?i?=?0;?i?<?strlen(str);i++) ????{ ????????if(str[i]?!=?currentNeed) ????????{ ????????????pStack->push(str[i]); ????????????switch(str[i]) ????????????{ ????????????????case'[': ????????????????????if(currentNeed?!=?0)//currentNeed有一個正確的值 ????????????????????{ ????????????????????????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)) ????????????{ ????????????????currentNeed?=?0; ????????????} ????????} ????} ????if(pStack->stackEmpty()) ????{ ????????cout<<"字符串括號匹配"<<endl; ????} ????else ????{ ????????cout<<"字符串括號不匹配"<<endl; ????} ????delete?pStack; ????pStack?=?NULL; ????delete?pNeedStack; ????pNeedStack?=?NULL; ????return?0; }
還是有點不太理解,自己做
查看全部 -
#include?<iostream> #include?<stdlib.h> #include?"MyStack.h" #include?<algorithm> #include?<string> using?namespace?std; //用棧進行括號匹配 int?main(void) { ????//定義兩個棧 ????MyStack?*pStack?=?new?MyStack(30);//用于存放輸入字符串的字符 ????MyStack?*pNeedStack?=?new?MyStack(30);//用于存放棧頂急需匹配的字符 ????char?str[]?=?"[()]"; ????char?currentNeed?=?0; ????for(int?i?=?0;?i?<?strlen(str);i++) ????{ ????????if(str[i]?!=?currentNeed) ????????{ ????????????pStack->push(str[i]); ????????????switch(str[i]) ????????????{ ????????????????case'[': ????????????????????if(currentNeed?!=?0)//currentNeed有一個正確的值 ????????????????????{ ????????????????????????pNeedStack->push(currentNeed); ????????????????????} ????????????????????currentNeed?=?']'; ????????????????????break; ????????????????case?'(': ????????????????????if(currentNeed?!=?0) ????????????????????{ ????????????????????????pNeedStack->push(currentNeed); ????????????????????} ????????????????????currentNeed?=?')'; ????????????????????break; ????????????} ????????} ????????else ????????{ ????????????char?elem; ????????????pStack->pop(elem); ????????????pNeedStack->pop(currentNeed); ????????} ????} ????if(pStack->stackEmpty()) ????{ ????????cout<<"字符串括號匹配"<<endl; ????} ????else ????{ ????????cout<<"字符串括號不匹配"<<endl; ????} ????delete?pStack; ????pStack?=?NULL; ????delete?pNeedStack; ????pNeedStack?=?NULL; ????return?0; }
查看全部 -
老師是把余數(shù)10,11,12,13直接壓進棧的,感覺直接壓A、B、C、D方便很多。
老師的方法暫未看。
查看全部 -
上一個程序不完善,因為有16進制。
https://www.cnblogs.com/curo0119/p/8304924.html
自己修改:應該正確:
#include?<iostream> #include?<stdlib.h> #include?"MyStack.h" #include?<algorithm> #include?<string> using?namespace?std; //用棧進行進制轉換 #define?BIN?2 #define?OCT?8 #define?HEX?16 int?main(void) { ????string?str?=?"0123456789ABCDEF"; ????MyStack?*pStack?=?new?MyStack(30); ????int?N?=?12; ????while(N) ????{ ????????int?tmp?=?N?%?HEX; ????????pStack->push(str[tmp]); ????????N?/=?HEX; ????} ????pStack->stackTraverse(false); ????delete?pStack; ????pStack?=?NULL; ????return?0; }
查看全部 -
首先把之前的MyStack改成int型:
#include?<iostream> #include?<stdlib.h> #include?"MyStack.h" #include?<algorithm> using?namespace?std; //用棧進行進制轉換 #define?BIN?2 #define?OCT?8 #define?HEX?16 int?main(void) { ????MyStack?*pStack?=?new?MyStack(30); ????int?N?=?1348; ????while(N) ????{ ????????int?tmp?=?N?%?OCT; ????????pStack->push(tmp); ????????N?/=?OCT; ????} ????pStack->stackTraverse(false); ????delete?pStack; ????pStack?=?NULL; ????return?0; }
查看全部 -
沒做筆記。。
查看全部 -
main.cpp #include?<iostream> #include?<stdlib.h> #include?"MyStack.h" using?namespace?std; //實現(xiàn)棧 int?main(void) { ????MyStack?*pStack?=?new?MyStack(5); ????pStack->push('h'); ????pStack->push('e'); ????pStack->push('l'); ????pStack->push('l'); ????pStack->push('o'); ????pStack->stackTraverse(true); ????pStack->clearStack(); ????cout<<pStack->stackLength()<<endl; ????if(pStack->stackEmpty()) ????{ ????????cout?<<?"棧為空"?<<?endl; ????} ????delete?pStack; ????pStack?=?NULL; ????return?0; }
MyStack.cpp // #include?"MyStack.h" #include?<iostream> using?namespace?std; MyStack::MyStack(int?size)//分配內存初始化??臻g,設定棧容量,棧頂 { ????m_iSize?=?size; ????m_pBuffer?=?new?char[size]; ????m_iTop?=?0;//表示此時的棧是個空棧 } MyStack::~MyStack() { ????delete?[]m_pBuffer; } bool?MyStack::stackEmpty()//判定棧是否為空,為空返回true,非空返回false { ????if(0?==?m_iTop) ????{ ????????return?true; ????} ????return?false; } bool?MyStack::stackFull() { ????if(m_iTop?==?m_iSize) ????{ ????????return?true; ????} ????return?false; } void?MyStack::clearStack()//清空棧 { ???????m_iTop?=?0; } int?MyStack::stackLength()//已有元素的個數(shù) { ????return?m_iTop; } bool?MyStack::push(char?elem)//元素入棧,棧頂上升 { ????//先判斷是否棧滿 ????if(stackFull()) ????{ ????????return?false; ????} ????m_pBuffer[m_iTop]?=?elem; ????m_iTop++; ????return?true; } //法二 //char?MyStack::pop() //{ //????if(stackEmpty()) //????{ //????????throw?1; //????} //????else //????{ //????????m_iTop--; //????????return?m_pBuffer[m_iTop]; //????} //} bool?MyStack::pop(char?&elem)//元素出棧,棧頂下降 { ????//先判定是否為空 ????if(stackEmpty()) ????{ ????????return?false; ????} ????m_iTop--;//入棧之后棧頂指向的是一個空位置 ????elem?=?m_pBuffer[m_iTop]; ????return?true; } void?MyStack::stackTraverse(bool?isFromButoom)//遍歷棧中所有元素 { ????if(isFromButoom) ????{ ????????for(int?i?=?0;?i?<?m_iTop;i++)//棧的長度就是m_iTop ????????{ ????????????cout<<?m_pBuffer[i]?<<?","; ????????} ????} ????else ????{ ????????for(int?i?=?m_iTop-1;?i>=0;i--) ????????{ ????????????cout?<<?m_pBuffer[i]?<<?","; ????????} ????} }
MyStack.h #ifndef?INC_0131_MYSTACK_H #define?INC_0131_MYSTACK_H class?MyStack { public: ????MyStack(int?size);//分配內存初始化棧空間,設定棧容量,棧頂 ????~MyStack();//回收??臻g內存 ????bool?stackEmpty();//判定棧是否為空,為空返回true,非空返回false ????bool?stackFull(); ????void?clearStack();//清空棧 ????int?stackLength();//已有元素的個數(shù) ????bool?push(char?elem);//元素入棧,棧頂上升 ????bool?pop(char?&elem);//元素出棧,棧頂下降 ????void?stackTraverse(bool?isFromButoom);//遍歷棧中所有元素 private: ????char?*m_pBuffer;//棧空間指針 ????int?m_iSize;//棧容量 ????int?m_iTop;//棧頂,棧中元素個數(shù)棧頂為1說明有一個元素 }; #endif?//INC_0131_MYSTACK_H
查看全部 -
為什么用.h和.cpp:https://blog.csdn.net/happywlg123/article/details/80375593
查看全部 -
數(shù)據(jù)結構—堆棧查看全部
-
要想用 new,這個類要有一個默認的構造函數(shù)
查看全部 -
函數(shù)指針 。
查看全部 -
08:00
查看全部 -
拋出異常 throw
外部 try catch
?????
(exception)異常,是用來報告你能恢復的那一類錯誤的,不是bugfix。
查看全部 -
public?class?Coordinate?{ ????private?int?x; ????private?int?y; ????Coordinate(int?x,int?y){ ????????this.x=x; ????????this.y=y; ????} ????void?PrintCoordinate(){ ????????System.out.println("("+x+","+y+")"); ????} }
查看全部 -
public?class?Mystackmain?{ ????public?static?void?main(String[]?args)?{ ????????Mystack?p=new?Mystack(5); ????????p.push('h'); ????????p.push('e'); ????????p.push('l'); ????????p.push('l'); ????????p.push('0'); ????????p.StackTraverse(false); ????????System.out.println(p.StackLength()); ????????p.pop(); ????????p.pop(); ????????p.StackTraverse(false); ????????System.out.println(p.StackLength()); ????????if(p.isEmpty()){ ????????????System.out.println("棧為空"); ????????} ????????if(p.isFull()){ ????????????System.out.println("棧為滿"); ????????} ????????p.DeleteMystack(); ????}
查看全部 -
public?class?Mystack?{ ????private?int?head; ????private?char[]?stack; ????private?int?StackLength; ????private?int?StackCapacity; ????Mystack(int?StackCapacity){ ????????this.StackCapacity=StackCapacity; ????????head=-1; ????????StackLength=0; ????????stack=new?char[StackCapacity]; ????} ????void?DeleteMystack(){ ????????stack=null; ????} ????boolean?isFull(){ ????????if(head+1==StackCapacity){ ????????????return?true; ????????} ????????return?false; ????} ????boolean?isEmpty(){ ????????if(head==-1){ ????????????return?true; ????????} ????????return?false; ????} ????void?ClearStack(){ ????????head=-1; ????????StackLength=0; ????} ????int?StackLength(){ ????????return?StackLength; ????} ????boolean?push(char?k){ ????????if(isFull()){ ????????????return?false; ????????} ????????head++; ????????stack[head]=k; ????????StackLength++; ????????return?true; ????} ????boolean?pop(){ ????????if(isEmpty()){ ????????????return?false; ????????} ????????System.out.println("出棧元素為"+stack[head]); ????????head--; ????????StackLength--; ????????return?true; ????} ????void?StackTraverse(boolean?isFromTop){ ????????if(!isFromTop){ ????????????for(int?i=0;i<=head;i++){ ????????????????System.out.print(stack[i]); ????????????} ????????????System.out.println(); ????????} ????????else?{ ????????????for?(int?i?=?head;?i?>=?0;?i--)?{ ????????????????System.out.print(stack[i]); ????????????} ????????????System.out.println(); ????????} ????}
java實現(xiàn)
查看全部 -
棧類:后進先出
公有函數(shù):
MyStack(int size):構造函數(shù),分配內存空間
~MyStack()? ?????????:析構函數(shù)與構造函數(shù)相反,主要在構造函數(shù)執(zhí)行完畢后被自動調用執(zhí)行善后工作,如釋放構造函數(shù)開辟的內存
int stackLength(): 返回棧里面的元素個數(shù)(不是內存空間大?。?/p>
void push(char elem):入棧(入棧前要判斷棧是否已滿)
void pop(char &elem):出棧(出棧前要判斷棧是否為空)
入棧導致棧頂上升 ? ?出棧導致棧頂下降
????????????????? ??
查看全部
舉報