-
出栈实现,入栈实现查看全部
-
栈的要求。。查看全部
-
进制转换查看全部
-
当遍历的对象复杂,可能要用到 visit()函数查看全部
-
队列判空:length = 0 栈判空:top = 0查看全部
-
匹配比较查看全部
-
栈函数查看全部
-
MyStack.h查看全部
-
dome查看全部
-
栈,后进先出查看全部
-
括号匹配 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; }查看全部
-
#include<iostream> #include"MyStack.h" #include<stdlib.h> #define BINARY 2//binary二进制 #define OCTONARY 8//octonary八进制 #define HEXADECIMAL 16//hexadecimal十六进制 using namespace std; int main(void) { char num[]="0123456789ABCDEF";//定义一个数组使其可以通用十六进制 MyStack<int> *pStack=new MyStack<int>(30); int N=2016; int mod=0; while(N!=0) { mod = N % HEXADECIMAL; pStack->push(mod); N=N / HEXADECIMAL; } // pStack->stackTraverse (false);要输出数组中的元素所以不能再用遍历了 //或使用下标运算符重载,按下标输出 /* for (int i=pStack->stackLength()-1;i>=0;i--) { num[pStack[i]]; }*/ int elem=0; while(!pStack->stackEmpty()) { pStack->pop(elem); cout<<num[elem]; } delete pStack; pStack=NULL; return 0; }查看全部
-
坐标类: #ifndef COORDINATE_H #define COORDINATE_H class Coordinate { public: Coordinate(int x=0,int y=0);//默认构造函数,应用于栈 void printCoordinate(); //operator<<,运算符重载使遍历通过。或通过调用本身有的printCoordinate()函数 private: int m_iX; int m_iY;//数据成员复杂的时候要使用拷贝构造函数来push }; #endif 实现: #include"Coordinate.h" #include<iostream> using namespace std; Coordinate::Coordinate(int x,int y) { m_iX=x; m_iY=y; } void Coordinate::printCoordinate () { cout<<"("<<m_iX<<","<<m_iY<<")"<<endl; }查看全部
-
应用栈到坐标: 主函数中需改动的地方: pStack->push (Coordinate(1,2));//传入的应为坐标类型 pStack->push (Coordinate(3,4)); 栈类中: bool push(Coordinate elem);//元素入栈,栈顶上升,void改为bool类型 bool pop(Coordinate &elem);//元素出栈,栈顶下降,char改为bool类型 void stackTraverse(bool isFromButtom);//遍历栈中所有元素 private: Coordinate *m_pBuffer;//栈空间指针 栈.cpp中 MyStack::MyStack(int size) { m_iSize=size; m_pBuffer=new Coordinate[size];//应用坐标Coordinate[size]要求坐标类中要用默认构造函数 m_iTop=0; } bool MyStack::push(Coordinate elem)//参数类型 bool MyStack::pop(Coordinate &elem) void MyStack::stackTraverse(bool isFromButtom) { if(isFromButtom) { for(int i=0;i<m_iTop;i++) { m_pBuffer[i].printCoordinate (); //cout<<m_pBuffer[i]<<",";//基本数据类型可以,但复杂数据类型不可以 } } else{ for(int i=m_iTop-1;i>=0;i--) { m_pBuffer[i].printCoordinate (); //cout<<m_pBuffer[i]<<","; }}//从栈顶到栈底遍历 } 坐标类: 待续查看全部
-
栈演示 #include<iostream> #include<stdlib.h> #include"MyStack.h" using namespace std; 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);//参数是bool类型,真为从底往顶 cout<<endl; char elem=0; pStack->pop (elem); cout<<elem<<endl; // pStack->clearStack (); cout<<pStack->stackLength ()<<endl; if(pStack->stackEmpty ()) { cout<<"栈为空"<<endl; } if(pStack->stackFull ()) { cout<<"栈为满 "<<endl; } delete pStack; pStack=NULL; return 0; }查看全部
举报
0/150
提交
取消