這篇文章將為大家詳細講解有關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;//??臻g地址
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++怎么實現?!边@篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。