溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++棧的模板實現

發(fā)布時間:2020-07-14 09:39:52 來源:網絡 閱讀:517 作者:du490529204 欄目:開發(fā)技術

#include<iostream>
using namespace std;
#pragma once
/*
1.判斷棧是否為空
2.得到棧的長度
3.元素入棧
4.元素出棧
5.清空棧
6.棧頂元素
7.棧底元素
*/
template<typename T>
class MyStack
{
public:
 MyStack(void);
 ~MyStack(void);
 void push(T elem);
 void pop(T& elem);
 void clearStack();
 bool isEmpty();
 int stackLength();
 void stackTraverse(bool isFromBottom);//元素的編歷
 int begin(); //棧頂元素
 int back();  //棧底元素
private:
 T* m_pBuffer;//??臻g地址
 int m_iTop; //指向棧頂,同時確定棧中元素個數
 int m_iSize; //棧的初始大小

};

template<typename T>
MyStack<T>::MyStack(void)
{
 m_iTop = 0;
 m_iSize = 5;
 m_pBuffer = new T[m_iSize];
}

template<typename T>
MyStack<T>::~MyStack(void)
{
 delete[] m_pBuffer;
}

template<typename T>
void MyStack<T>::push(T elem)
{
 /*
 以下用到了動態(tài)增加空間大小,而不是在初始化時,定義一個非常大的空間
 原理:
   注意:動態(tài)增加大小時,以原大小的兩倍配置一塊新的空間,
   然后將原內容拷貝過來, 并釋放原空間,再將指針指向新的空間
 */
 if(m_iTop == m_iSize)
 {
  m_iSize *= 2;
  T* pTemp = new T[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++;
}

template<typename T>
void MyStack<T>::pop(T& elem)
{
 m_iTop--;
 elem = m_pBuffer[m_iTop];

}

template<typename T>
void MyStack<T>::clearStack()
{
 m_iTop = 0;
}

template<typename T>
bool MyStack<T>::isEmpty()
{
 if(m_iTop == 0)
 {
  return true;
 }
 return false;
}

template<typename T>
int MyStack<T>::stackLength()
{
 return m_iTop;
}

template<typename T>
void MyStack<T>::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;
  }
 }
 

}

template<typename T>
int MyStack<T>::begin()
{
 return m_pBuffer[m_iTop-1];
}

template<typename T>
int MyStack<T>::back()
{
 return m_pBuffer[0];
}


調用:(可以用再嘗試傳下坐標進去)

 MyStack<int> *myStack =  new MyStack<int>();
 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();

 cout<<"存儲char類型"<<endl;
 MyStack<char> *charStack = new MyStack<char>();
 charStack->push('a');
 charStack->push('b');
 charStack->stackTraverse(false);


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI