这篇文章将为大家详细讲解有关C++怎么实现栈,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成都创新互联专注于浙江网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供浙江营销型网站建设,浙江网站制作、浙江网页设计、浙江网站官网定制、成都小程序开发服务,打造浙江网络公司原创品牌,更为您提供浙江网站排名全网营销落地服务。
/*
1.判断栈是否为空
2.得到栈的长度
3.元素入栈
4.元素出栈
5.清空栈
6.栈顶元素
7.栈底元素
*/
栈的空间动态增加:
/*
动态增加空间大小,而不是在初始化时,定义一个非常大的空间
原理:
注意:动态增加大小时,以原大小的两倍配置一块新的空间,
然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间
*/
#include
using namespace std;
#pragma once
class 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<
}
else
{
for(int i = m_iTop-1;i >= 0;--i)
{
cout<
}
}
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();
关于“C++怎么实现栈”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。