C++堆栈类模板实现代码

 更新时间:2020年08月27日 10:11:02   作者:theVicTory  
这篇文章主要为大家详细介绍了C++堆栈类模板的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近在复习数据结构,涉及到堆栈的实现,通过类模板可以使堆栈的存储数据类型更为灵活,下面是堆栈的实现代码:

#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();//长度
 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() {//栈长度
 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

其中需要注意的是类模板需要在每个函数之前写上模板定义template <typename T>,并且将类名写成MyStack<T>,函数中涉及到类的使用时用T代替即可。

接着我用一个坐标点类Coordinate来做测试:

在Coordinate类中利用函数重载运算符<<实现坐标点的打印

#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;
}

下面是测试主函数:

#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));//坐标点入栈
 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 << "长度:" << pStack->stackLength();
 pStack->clearStack();//清空栈
 pStack->stackTranverse();
 
 //delete pStack;
 //pStack = NULL;
 
 system("pause");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言中strspn()函数和strcspn()函数的对比使用

    C语言中strspn()函数和strcspn()函数的对比使用

    这篇文章主要介绍了C语言中strspn()函数和strcspn()函数的对比使用,strspn是计算属于字符串的字符数而strcspn则是判断不属于,需要的朋友可以参考下
    2015-08-08
  • C++数据结构与算法之判断一个链表是否为回文结构的方法

    C++数据结构与算法之判断一个链表是否为回文结构的方法

    这篇文章主要介绍了C++数据结构与算法之判断一个链表是否为回文结构的方法,结合实例形式分析了回文结构并结合实例给出了C++判断回文的操作技巧,需要的朋友可以参考下
    2017-05-05
  • C语言实现的循环单链表功能示例

    C语言实现的循环单链表功能示例

    这篇文章主要介绍了C语言实现的循环单链表功能,结合实例形式分析了基于C语言实现的循环单链表定义、创建、添加、删除、打印、排序等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • C/C++语言中全局变量重复定义问题的解决方法

    C/C++语言中全局变量重复定义问题的解决方法

    这篇文章主要给大家介绍了关于C/C++语言中全局变量重复定义问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • c++ 预处理之正整型实现方法

    c++ 预处理之正整型实现方法

    这篇文章主要介绍了c++ 预处理之正整型实现方法,需要的朋友可以参考下
    2017-07-07
  • C++实现动态数组功能

    C++实现动态数组功能

    这篇文章主要为大家详细介绍了C++实现动态数组功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • C语言结构体版学生成绩管理系统

    C语言结构体版学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言结构体版的学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 详解散列表算法与其相关的C语言实现

    详解散列表算法与其相关的C语言实现

    这篇文章主要介绍了详解散列表算法与其相关的C语言实现,平时经常出现于各大考试竞赛与程序员面试题目当中,需要的朋友可以参考下
    2015-08-08
  • C++利用map实现并查集

    C++利用map实现并查集

    这篇文章主要为大家详细介绍了C++利用map实现并查集,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • c++实现MD5算法实现代码

    c++实现MD5算法实现代码

    用c++实现了md5算法。包含 md5.h 和md5.cpp 两个文件。主要参考百度百科 “MD5” 原理,代码中变量命名也是参考其中的公式,程序的使用说明在md5.h 文件的末尾注释中
    2013-11-11

最新评论