数据结构之栈模板实现(3)
来源:互联网 发布:斯伦贝谢软件研发中心 编辑:程序博客网 时间:2024/05/18 12:38
注意:1 注意模板的格式,声明文件和实现文件都放在头文件中,无法实现分离编译;
2 学会重载运算符和友元函数使用
#ifndef MYSTACK_H#define MYSTACK_Htemplate <typename T>class MyStack{public: MyStack(){} MyStack(int size); //分配栈空间 ~MyStack(); bool stackEmpty(); bool stackFull(); void clearStack(); int stackLength(); bool push(T elem); bool pop(T &elem); void stackTraverse();private: T *m_pBuffer; //栈空间指针 int m_iSize; //栈容量 int m_iTop; //栈顶,栈中元素个数};template<typename T>MyStack<T>::MyStack(int size){ m_iSize = size; m_iTop = 0; m_pBuffer = new T[size];}template<typename T>MyStack<T>::~MyStack(){ delete[] m_pBuffer; m_pBuffer = nullptr;}template<typename T>bool MyStack<T>::stackEmpty(){ if (0 == m_iTop) return true; return false;}template<typename T>bool MyStack<T>::stackFull(){ if (m_iTop == m_iSize) return true; return false;}template<typename T>void MyStack<T>::clearStack(){ m_iTop = 0;}template<typename T>int MyStack<T>::stackLength(){ return m_iTop;}template<typename T>bool MyStack<T>::push(T elem){ if (stackFull()) return false; m_pBuffer[m_iTop++] = elem; return true;}template<typename T>bool MyStack<T>::pop(T &elem){ if (stackEmpty()) return false; m_iTop--; elem = m_pBuffer[m_iTop]; return true;}template<typename T>void MyStack<T>::stackTraverse(){ for (int i = 0; i < m_iTop; i++) cout << m_pBuffer[i];}#endif
#ifndef COORDINATE_H#define COORDINATE_H#include<ostream>using namespace std;class Coordinate{ friend ostream &operator<<(ostream &out, Coordinate &coor);public: Coordinate(){} Coordinate(int x, int y); void printCoordinate();private: int m_iX; int m_iY;};#endif
#include"Coordinate.h"#include<iostream>using namespace std;Coordinate::Coordinate(int x, int y) :m_iX(x), m_iY(y){}void Coordinate::printCoordinate(){ cout << "(" << m_iX << "," << m_iY << ")" << endl;}ostream &operator<<(ostream &out, Coordinate &coor){ out << "(" << coor.m_iX << "," << coor.m_iY << ")" << endl; return out;}
#include<iostream>#include"MyStack.h"#include"Coordinate.h"using namespace std;/* 栈-类模板 要求: 将普通栈改造为类模板,使其可以适用于任何数据类型 目的:灵活掌握栈机制,理解抽象数据类型在栈中的应用*/int main(){ MyStack<Coordinate> *pStack = new MyStack<Coordinate>(4); pStack->push(Coordinate(1, 2)); pStack->push(Coordinate(1, 3)); pStack->stackTraverse(); delete pStack; pStack = NULL; return 0;}
0 0
- 数据结构之栈模板实现(3)
- 数据结构实现(栈类模板)
- [数据结构]栈之顺序栈的类模板实现
- [数据结构]栈之链式栈的类模板实现
- 简单数据结构之栈(C++模板库实现)
- 数据结构实现(链表类模板)
- 数据结构实现(哈希表类模板)
- 数据结构之栈(链式存储)——C++模板类实现
- 数据结构之图——模板实现
- 数据结构(4) 顺序栈 c++ 模板实现
- [数据结构]栈的实现(c++/类模板)
- 数据结构(3)单循环链表 c++ 模板实现
- 数据结构之顺序栈(数组)C++(模板)
- 数据结构之 栈stack 模板类(数组描述方法)
- 数据结构之 栈stack 模板类(链表表示)
- 栈与队列-顺序栈与链栈类模板的实现(数据结构基础 第3周)
- 数据结构:模板实现栈和队列
- 数据结构学习:栈的模板类实现
- PowerDesigner怎样才能在修改表的字段Name的时候Code不自动跟着变
- 字符串操作之string.h
- 【LeetCode】path-sum i&ii
- 解决php 文件下载 IE 文件名中文乱码
- 数据结构与算法有用的知识链接-----不断更新
- 数据结构之栈模板实现(3)
- MediaPlayer 实现自选音乐作为消息提示音
- JS算法(获取斐波那契数列的前n项)
- 基于DragonBoard 410c的智能门铃系列一之系统总构架
- ubuntu16.04安装cuda8和opencv3.2
- DES加密算法工具类
- Spring EmptyResultDataAccessException异常的源码分析和解决方法
- 带返回值的Python多线程方法
- [leetcode: Python]122. Best Time to Buy and Sell Stock 2