Q:通过 数组 实现 栈 功能
A:
MyStack.h
#ifndef MYSTACK_H#define MYSTACK_H/******************************//*栈实现 2017.03.02 by hyc*****//******************************/class MyStack{public: MyStack(int size); //初始化栈空间 ~MyStack();//回收栈空间内存 void clearStack();//清空栈 bool stackEmpty();//判空栈,若空返回true bool stackFull();//判满栈,若满返回true int stackLength();//栈中元素个数 bool push(char elem);//元素入栈,栈顶上升 bool pop(char &elem);//元素出栈,栈顶下降 void stackTraverse(bool isFromBottom);//遍历栈中元素 isFromBottom=1,从栈底遍历PRivate: char *m_pBuffer;//栈空间指针 int m_isize;//栈容量 int m_itop;//栈顶,也是栈中元素个数};#endif // !MYSTACK_HMyStack.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;}void MyStack::clearStack(){ m_itop = 0;}bool MyStack::stackEmpty(){ return 0 == m_itop ? true : false;}bool MyStack::stackFull(){ return m_isize == m_itop ? true : false;}int MyStack::stackLength(){ return m_itop;}bool MyStack::push(char elem){ if (stackFull()) { return false; } m_pBuffer[m_itop] = elem; m_itop++; return true;}bool MyStack::pop(char &elem){ if (stackEmpty()) { return false; } m_itop--; elem = m_pBuffer[m_itop]; return true;}void MyStack::stackTraverse(bool isFromBottom){ 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] << ","; } }}demo.cpp:用于测试栈功能实现情况#include "MyStack.h"#include <iostream>using namespace std;/******************************//*栈实现 2017.03.02 by hyc*****//******************************/int main(void){ MyStack *pStack = new MyStack(5); pStack->push('h');//栈底 pStack->push('e'); pStack->push('l'); pStack->push('l'); pStack->push('o');//栈顶 if (pStack->stackFull()){ cout << "栈满" << endl; } pStack->stackTraverse(true); cout << endl; char ch; pStack->pop(ch); cout << ch << endl; if (pStack->stackEmpty()){ cout << "栈空" << endl; } if (pStack->stackFull()){ cout << "栈满" << endl; } pStack->stackTraverse(false); cout << pStack->stackLength() << endl; pStack->clearStack(); if (pStack->stackEmpty()){ cout << "栈空" << endl; } delete pStack; pStack = NULL; system("pause"); return 0;}输出结果:
注意:本次练习只实现了简单的int类型的栈功能,可以使用模板类进一步实现其多类型支持。并且本程序有很多不完善的地方,如分配空间等的异常检测。
新闻热点
疑难解答
图片精选