出栈传入的是引用的好处:
使用这个函数的时候,传入参数可以是一个变量,这个变量可以把传给他的值取出
执行入栈操作,把元素存入栈顶,栈顶指针++以后指向了一个空位置(下一个元素要入栈的位置)所以入栈先复制再++操作
入栈操作后做出栈操作,要先把栈顶指针--指向有元素的位置,再把栈顶元素赋值给变量 ,达到了栈高度度下降,并且返回了一个值
函数指针 。
08:00
抛出异常 throw
外部 try catch
?????
(exception)异常,是用来报告你能恢复的那一类错误的,不是bugfix。
栈类的声明
栈的遍历,两种方式
出栈操作返回Bool值
出栈传入的是引用的好处:
使用这个函数的时候,传入参数可以是一个变量,这个变量可以把传给他的值取出
执行入栈操作,把元素存入栈顶,栈顶指针++以后指向了一个空位置(下一个元素要入栈的位置)所以入栈先复制再++操作
入栈操作后做出栈操作,要先把栈顶指针--指向有元素的位置,再把栈顶元素赋值给变量 ,达到了栈高度度下降,并且返回了一个值
如果出栈操作返回的是char类型,可以不用传递参数,因为可以把指针指向的位置的值直接返回出来,异常也可以返回
出栈和队列都输入引用
出入栈设为bool类型
//在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]<<",";
}
}
}
栈的 实现