温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++怎么实现栈

发布时间:2021-10-21 11:24:37 来源:亿速云 阅读:198 作者:小新 栏目:编程语言

这篇文章将为大家详细讲解有关C++怎么实现栈,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

/*
1.判断栈是否为空
2.得到栈的长度
3.元素入栈
4.元素出栈
5.清空栈
6.栈顶元素
7.栈底元素
*/

栈的空间动态增加:

 /*
 动态增加空间大小,而不是在初始化时,定义一个非常大的空间
 原理:
   注意:动态增加大小时,以原大小的两倍配置一块新的空间,
   然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间
  
 */

#include<iostream>
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<<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();

关于“C++怎么实现栈”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI