您的位置:首页 > 编程语言 > C语言/C++

C++实现栈应用之进制转换

2017-02-06 15:23 323 查看

C++实现栈应用之进制转换

MyStack.h

#ifndef MYSTACK_H
#define MYSTACK_H
#include <iostream>
using namespace std;

template <typename T>
class MyStack
{
public:
MyStack(int size);          //分配内存初始化空间,设定栈容量,栈顶
~MyStack();                    //回收栈空间内存
bool stackEmpty();          //判定栈是否为空,为空返回true,非空返回false
bool stackFull();           //判定栈是否为满,为满返回true,不满返回false
void clearStack();          //清空栈
int stackLength();          //已有元素的个数
bool push(T elem);          //元素入栈,栈顶上升
bool pop(T &elem);          //元素出栈,栈顶下降
void stackTraverse(bool isFromButtom);      //遍历栈中所有元素

private:
T *m_pBuffer;               //栈空间指针
int m_iSize;                //栈容量
int m_iTop;                 //栈顶,栈中元素个数

};

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

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

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

template <typename T>
bool MyStack<T>::stackFull()
{
if (m_iTop == m_iSize)
{
return true;
}
else
{
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())
{
m_pBuffer[m_iTop] = elem;
m_iTop++;
return true;
}
else
{
return false;
}
}

template <typename T>
bool MyStack<T>::pop(T &elem)
{
if (!stackEmpty())
{
m_iTop--;
elem = m_pBuffer[m_iTop];
return true;
}
else
{
return false;
}
}

template <typename T>
void MyStack<T>::stackTraverse(bool isFromButtom)
{
if (isFromButtom)
{
for (int i = 0; i < m_iTop; i++)
{
cout << m_pBuffer[i];
}
}
else
for (int i = m_iTop -1; i >= 0; i--)
{
cout << m_pBuffer[i];
}
cout << endl;
}

#endif MYSTACK_H


main.cpp

#include "MyStack.h"

#define BINARY      2
#define OCTONSRY    8
#define HEXADECTMAL 16

int main()
{
char num[] = "0123456789ABCDEF";
MyStack<char> *pStack = new MyStack<char>(50);

int N = 0;
cin >> N;
int mod = 0;
while (N != 0)
{
mod = N % HEXADECTMAL;
pStack->push(num[mod]);
N = N / HEXADECTMAL;
}

pStack->stackTraverse(false);

delete pStack;
pStack = NULL;

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数据结构 栈应用