欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++堆棧類(lèi)模板實(shí)現(xiàn)代碼

 更新時(shí)間:2020年08月27日 10:11:02   作者:theVicTory  
這篇文章主要為大家詳細(xì)介紹了C++堆棧類(lèi)模板的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu),涉及到堆棧的實(shí)現(xiàn),通過(guò)類(lèi)模板可以使堆棧的存儲(chǔ)數(shù)據(jù)類(lèi)型更為靈活,下面是堆棧的實(shí)現(xiàn)代碼:

#ifndef MYSTACK_H
#define MYSTACK_H
#include <iostream>
using namespace std;
 
template <typename T>
class MyStack
{
public:
 MyStack(int size);
 ~MyStack();
 bool stackEmpty();//判空
 bool stackFull();//判滿(mǎn)
 void clearStack();//清空
 int stackLength();//長(zhǎng)度
 bool push(T elem);//壓棧
 bool pop(T &elem);//出棧
 bool stackTop(T &elem);//返回棧頂
 void stackTranverse();//遍歷棧
 
private:
 T *m_pStack;//棧指針
 int m_iSize;//棧容量
 int m_iTop;//棧頂
};
 
template <typename T>
MyStack<T>::MyStack(int size)
{
 m_iSize = size;
 m_pStack = new T[m_iSize];
 m_iTop = 0;
}
template <typename T>
MyStack<T>::~MyStack()
{
 delete m_pStack;
 m_pStack = NULL;
}
template <typename T>
bool MyStack<T>::stackEmpty() {//判空
 return m_iTop == 0 ? true : false;
}
template <typename T>
bool MyStack<T>::stackFull() {//判滿(mǎn)
 return m_iTop == m_iSize ? true : false;
}
template <typename T>
int MyStack<T>::stackLength() {//棧長(zhǎng)度
 return m_iTop;
}
template <typename T>
void MyStack<T>::clearStack() {//清空
 m_iTop = 0;
}
template <typename T>
bool MyStack<T>::push(T elem) {//壓棧
 if (stackFull()) {
 return false;
 }
 else {
 m_pStack[m_iTop++] = elem;
 return true;
 }
}
template <typename T>
bool MyStack<T>::pop(T &elem) {//出棧
 if (stackEmpty())
 {
 return false;
 }
 else {
 elem = m_pStack[--m_iTop];
 return true;
 }
}
template <typename T>
bool MyStack<T>::stackTop(T &elem) {//返回棧頂元素
 if (stackEmpty())
 {
 return false;
 }
 else {
 elem = m_pStack[m_iTop-1];
 return true;
 }
}
template <typename T>
void MyStack<T>::stackTranverse() {//遍歷棧
 int i = 0;
 for (i = 0; i < m_iTop; i++) {
 cout << m_pStack[i];
 }
}
#endif

其中需要注意的是類(lèi)模板需要在每個(gè)函數(shù)之前寫(xiě)上模板定義template <typename T>,并且將類(lèi)名寫(xiě)成MyStack<T>,函數(shù)中涉及到類(lèi)的使用時(shí)用T代替即可。

接著我用一個(gè)坐標(biāo)點(diǎn)類(lèi)Coordinate來(lái)做測(cè)試:

在Coordinate類(lèi)中利用函數(shù)重載運(yùn)算符<<實(shí)現(xiàn)坐標(biāo)點(diǎn)的打印

#include <ostream>
using namespace std;
 
class Coordinate
{
public:
 friend ostream& operator<<(ostream &out, Coordinate &coor);
 Coordinate(int x=0,int y=0)
 {
 m_iX = x;
 m_iY = y;
 }
 
 ~Coordinate()
 {
 }
private:
 int m_iX;
 int m_iY;
};
ostream& operator<<(ostream &out, Coordinate &coor) {
 out << "(" << coor.m_iX << "," << coor.m_iX << ")" << endl;
 return out;
}

下面是測(cè)試主函數(shù):

#include <iostream>
#include "MyStack.h"
#include "Coordinate.h"
using namespace std;
 
int main() {
 MyStack<Coordinate> *pStack = new MyStack<Coordinate>(5);
 
 pStack->push(Coordinate(3, 5));//坐標(biāo)點(diǎn)入棧
 pStack->push(Coordinate(7, 5));
 pStack->push(Coordinate(6, 5));
 pStack->push(Coordinate(4, 5));
 pStack->push(Coordinate(3, 5));
 
 pStack->stackTranverse();//遍歷棧
 Coordinate t;
 pStack->pop(t);//出棧
 cout <<"彈出的t為:"<< t ;
 cout << "長(zhǎng)度:" << pStack->stackLength();
 pStack->clearStack();//清空棧
 pStack->stackTranverse();
 
 //delete pStack;
 //pStack = NULL;
 
 system("pause");
 return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論