main.cpp
#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);
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)//分配内存初始化栈空间,设定栈容量,栈顶
{
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()//已有元素的个数
{
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();//回收栈空间内存
bool stackEmpty();//判定栈是否为空,为空返回true,非空返回false
bool stackFull();
void clearStack();//清空栈
int stackLength();//已有元素的个数
bool push(char elem);//元素入栈,栈顶上升
bool pop(char &elem);//元素出栈,栈顶下降
void stackTraverse(bool isFromButoom);//遍历栈中所有元素
private:
char *m_pBuffer;//栈空间指针
int m_iSize;//栈容量
int m_iTop;//栈顶,栈中元素个数栈顶为1说明有一个元素
};
#endif //INC_0131_MYSTACK_H
为什么用.h和.cpp:https://blog.csdn.net/happywlg123/article/details/80375593
MyStack.h 文件
#ifndef MYSTACK_H
#define MYSTACK_H
class MyStack
{
public:
MyStack(int size);//分配内存初始化栈空间,设定栈容量,栈顶
~MyStack();//回收栈空间内存
bool stackEmpty();//判断栈是否为空,空返回ture,非空返回false
bool stackFull();//判定栈是否已经满,满返回ture,不满返回false
void clearStack();//清空栈
int stackLength(); //已有的元素个数
void push(char elem);//元素入栈,栈顶上升
char pop();//元素出栈,栈顶下降
bool pop(char &elem)
void stackTraverse(bool);//遍历栈中所有元素
//目的:掌握栈的实现原理和运行机制
private:
char *m_pBuffer;//栈空间指针
int m_iSize;//栈容量
int m_iTop;//栈顶,栈中元素个数
};
Mystack.ccp
#include "MyStack.h"
#include <iostream>
MyStack::MyStack(int size)//分配内存初始化栈空间,设定栈容量,栈顶
{
m_iSize = size;
m_pBuffer = new char[size];
m_iTop = 0;
}
~MyStack::MyStack()//回收栈空间内存
{
delete []m_pBuffer;
m_pBuffer = NULL;
}
bool MyStack::stackEmpty()//判断栈是否为空,空返回ture,非空返回false
{
if(0 == m_iTop)
{
return true;
}
return false;
}
bool MyStack::stackFull()//判定栈是否已经满,满返回ture,不满返回false
{
if(m_iTop >= m_iSize)
{
return true;
}
return false;
}
void MyStack::clearStack()//清空栈
{
m_iTop = 0;
}
int MyStack::stackLength(); //已有的元素个数
{
return m_iTop;
}
void 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--;
m_pBuffer[m_iTop];
}
return m_pBuffer[m_iTop];
}
bool MyStack::pop(char &elem)
{
if(stackEmpty())
{
return false;
}else
{
m_iTop--;
elem = m_pBuffer[m_iTop];
}
return true;
}
void MyStack::stackTraverse(bool isFromButtom)//遍历栈中所有元素
{
if(isFromButtom)
{
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]<<",";
}
}
}
#include <iostream>
#include "MyStack.h"
#include "MyStack.cpp"
using namespace std;
int main()
{
MyStack *pStack=new MyStack(5);
delete pStack;
pStack=NULL;
pStack->push('h');//低
pStack->push('e');
pStack->push('l');
pStack->push('l');
pStack->push('0');//顶
pStack->stackTraverse(true);
char elem =0;
pStack->pop(elem);//取出来的是栈顶的那个字符o
cout<<endl<<elem<<endl;
cout<<pStack->stackLength()<<endl;
//pStack->pop();
if(pStack->stackEmpty())
{
cout<<"栈为空"<<endl;
}
if(pStack->stackFull())
{
cout<<"栈为满"<<endl;
}
pStack->clearStack();+
cout<<pStack->stackLength()<<endl;
system("pause");
return 0;
}
1.注意 当函数形参是引用时,实参必须是变量或者变量的引用,而不能是具体的值 例如:如果要传 3,必须先int a=3,再把a传进去 2.新建文件到项目里时要勾选那两个选项
这是头文件