C++堆棧類模板實(shí)現(xiàn)代碼
最近在復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu),涉及到堆棧的實(shí)現(xiàn),通過(guò)類模板可以使堆棧的存儲(chǔ)數(shù)據(jù)類型更為靈活,下面是堆棧的實(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();//判滿
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() {//判滿
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
其中需要注意的是類模板需要在每個(gè)函數(shù)之前寫(xiě)上模板定義template <typename T>,并且將類名寫(xiě)成MyStack<T>,函數(shù)中涉及到類的使用時(shí)用T代替即可。
接著我用一個(gè)坐標(biāo)點(diǎn)類Coordinate來(lái)做測(cè)試:
在Coordinate類中利用函數(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)文章
使用?c++?在?windows?上定時(shí)執(zhí)行一個(gè)函數(shù)的示例代碼
這篇文章主要介紹了使用c++在windows上穩(wěn)定定時(shí)執(zhí)行一個(gè)函數(shù),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲操作
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷游戲操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
Visual Studio 2019 DLL動(dòng)態(tài)庫(kù)連接實(shí)例(圖文教程)
這篇文章主要介紹了Visual Studio 2019 DLL動(dòng)態(tài)庫(kù)連接實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié)
本文主要介紹了VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
QT實(shí)現(xiàn)C++數(shù)據(jù)類與json轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了如何使用QT實(shí)現(xiàn)C++數(shù)據(jù)類與json轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量
這篇文章主要為大家詳細(xì)介紹了基于Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

