首页 > 编程 > C++ > 正文

数组实现栈功能(C++练习记录)

2019-11-06 08:28:55
字体:
来源:转载
供稿:网友

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_H

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;}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类型的栈功能,可以使用模板类进一步实现其多类型支持。并且本程序有很多不完善的地方,如分配空间等的异常检测。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选