/*
1.判断栈是否为空2.得到栈的长度3.元素入栈4.元素出栈5.清空栈6.栈顶元素7.栈底元素*/栈的空间动态增加:
/*
动态增加空间大小,而不是在初始化时,定义一个非常大的空间 原理: 注意:动态增加大小时,以原大小的两倍配置一块新的空间, 然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间 */#include<iostream>
using namespace std;#pragma onceclass MyStack{ public: MyStack(void); ~MyStack(void); void push(int elem); void pop(int& elem); void clearStack(); bool isEmpty(); int stackLength(); void stackTraverse(bool isFromBottom);//元素的编历 int begin(); //栈顶元素 int back(); //栈底元素private: int* m_pBuffer;//栈空间地址 int m_iTop; //指向栈顶,同时确定栈中元素个数 int m_iSize; //栈的初始大小};
MyStack::MyStack(void){ m_iTop = 0; m_iSize = 5; m_pBuffer = new int[m_iSize];} MyStack::~MyStack(void){ delete[] m_pBuffer;}/*
以下用到了动态增加空间大小,而不是在初始化时,定义一个非常大的空间 原理: 注意:动态增加大小时,以原大小的两倍配置一块新的空间, 然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间 */void MyStack::push(int elem)
{ if(m_iTop == m_iSize) { m_iSize *= 2; int* pTemp = new int[m_iSize]; for(int i = 0;i < m_iTop; ++i) { pTemp[i] = m_pBuffer[i]; } delete[] m_pBuffer; m_pBuffer = NULL; m_pBuffer = pTemp;} m_pBuffer[m_iTop] = elem; m_iTop++;}
void MyStack::pop(int& elem)
{ m_iTop--; elem = m_pBuffer[m_iTop];}
void MyStack::clearStack()
{ m_iTop = 0;}bool MyStack::isEmpty()
{ if(m_iTop == 0) { return true; } return false;}int MyStack::stackLength()
{ return m_iTop;}void MyStack::stackTraverse(bool isFromBottom)
{ //栈底开始遍历 if(isFromBottom) { for(int i = 0;i < m_iTop;++i) { cout<<m_pBuffer[i]<<endl; } } else { for(int i = m_iTop-1;i >= 0;--i) { cout<<m_pBuffer[i]<<endl; } }}
int MyStack::begin()
{ return m_pBuffer[m_iTop-1];}int MyStack::back()
{ return m_pBuffer[0];}调用:
MyStack* myStack = new MyStack();
for(int i = 0 ;i < 100; ++i) { myStack->push(i); } cout << myStack->stackLength() << endl; cout << myStack->begin() << endl; cout << myStack->back() << endl; myStack->stackTraverse(false); myStack->clearStack();