C/C++使用模板实现数据栈
2016-04-15 04:22
656 查看
// 栈.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#define MAXSIZE 100
using namespace std;
/*
栈的基本运算
1. 栈的初始化 (initStack)
2. 判断栈是否为空(isEmpty)
3.入栈 (push)
4.出栈 (pop)
5.读取栈元素 (GetTop)
*/
template <typename T>
class Stack
{
public:
friend ostream& operator<<(ostream& os, Stack<T>& rhs)
{
for (int i = 0; i < rhs.Count; i++)
{
os << rhs.Top[i] << " ";
}
os << endl;
return os;
}
Stack();
Stack(unsigned long EmeCount);
~Stack();
bool IsEmpty();
bool Push(T Element);
bool Pop();
T GetTop();
private:
bool InitStack(unsigned long EmelentCount);
T* Top;
int Count;
};
template <typename T>
bool Stack<T>::InitStack(unsigned long EmelentCount)
{
Top = (T*)malloc(sizeof(T)*EmelentCount);
if (Top == NULL)
return false;
return true;
}
template <typename T>
Stack<T>::Stack()
{
if (!InitStack(MAXSIZE))
cout << "栈初始化失败!" << endl;
Count = 0;
}
template <typename T>
Stack<T>::Stack(unsigned long ElementCount)
{
if (!InitStack(ElementCount))
cout << "栈初始化失败!" << endl;
Count = 0;
}
template <typename T>
bool Stack<T>::Push(T Element)
{
Count++;
for (int i = Count; i > 0; i--)
{
Top[i] = Top[i - 1];
}
Top[0] = Element;
return true;
}
template <typename T>
T Stack<T>::GetTop()
{
return Top[0];
}
template <typename T>
bool Stack<T>::Pop()
{
for (int i = 0; i < Count; i++)
{
Top[i] = Top[i + 1];
}
Count--;
return true;
}
template <typename T>
bool Stack<T>::IsEmpty()
{
if (Count <= 0)
return true;
else
return false;
}
template <typename T>
Stack<T>::~Stack()
{
}
int _tmain(int argc, _TCHAR* argv[]) 9
{
Stack<int> binary;
int Num = 0;
cout << "请输入你想要转换的数字" << endl;
cin >> Num;
while (Num)
{
binary.Push(Num % 2);
Num = Num / 2;
}
cout << binary << endl;
system("pause");
return 0;
}
//
#include "stdafx.h"
#include <iostream>
#define MAXSIZE 100
using namespace std;
/*
栈的基本运算
1. 栈的初始化 (initStack)
2. 判断栈是否为空(isEmpty)
3.入栈 (push)
4.出栈 (pop)
5.读取栈元素 (GetTop)
*/
template <typename T>
class Stack
{
public:
friend ostream& operator<<(ostream& os, Stack<T>& rhs)
{
for (int i = 0; i < rhs.Count; i++)
{
os << rhs.Top[i] << " ";
}
os << endl;
return os;
}
Stack();
Stack(unsigned long EmeCount);
~Stack();
bool IsEmpty();
bool Push(T Element);
bool Pop();
T GetTop();
private:
bool InitStack(unsigned long EmelentCount);
T* Top;
int Count;
};
template <typename T>
bool Stack<T>::InitStack(unsigned long EmelentCount)
{
Top = (T*)malloc(sizeof(T)*EmelentCount);
if (Top == NULL)
return false;
return true;
}
template <typename T>
Stack<T>::Stack()
{
if (!InitStack(MAXSIZE))
cout << "栈初始化失败!" << endl;
Count = 0;
}
template <typename T>
Stack<T>::Stack(unsigned long ElementCount)
{
if (!InitStack(ElementCount))
cout << "栈初始化失败!" << endl;
Count = 0;
}
template <typename T>
bool Stack<T>::Push(T Element)
{
Count++;
for (int i = Count; i > 0; i--)
{
Top[i] = Top[i - 1];
}
Top[0] = Element;
return true;
}
template <typename T>
T Stack<T>::GetTop()
{
return Top[0];
}
template <typename T>
bool Stack<T>::Pop()
{
for (int i = 0; i < Count; i++)
{
Top[i] = Top[i + 1];
}
Count--;
return true;
}
template <typename T>
bool Stack<T>::IsEmpty()
{
if (Count <= 0)
return true;
else
return false;
}
template <typename T>
Stack<T>::~Stack()
{
}
int _tmain(int argc, _TCHAR* argv[]) 9
{
Stack<int> binary;
int Num = 0;
cout << "请输入你想要转换的数字" << endl;
cin >> Num;
while (Num)
{
binary.Push(Num % 2);
Num = Num / 2;
}
cout << binary << endl;
system("pause");
return 0;
}
相关文章推荐
- C++空类的大小问题
- C++ vector的用法
- c++进阶之路
- C++多态篇2——虚函数表详解之从内存布局看函数重载,函数覆盖,函数隐藏
- C/C++什么是页抖动?
- C/C++左值&右值
- # 极客班C++OOP(下)第五周笔记
- Counting Bits leetcode 338
- 链式哈希表
- C++ 解析Json——jsoncpp
- c++的this指针
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- C++中负数的位操作
- C++中负数的位操作
- 面向对象课程 - 寒假第四次作业 - C++计算器项目计算部分
- C/C++ 进阶 —— 指向指针的指针
- neuq oj1063: 谭浩强C语言(第三版)习题8.3 求素数 C++
- c++容器和适配器
- C++实现链表常见面试题