1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 5 template <class T> 6 class LinkStack; 7 template <class T> 8 class StackNode 9 { 10 public: 11 friend class LinkStack<T>; 12 private: 13 T data; 14 StackNode<T> *next; 15 }; 16 template<class T> 17 class LinkStack 18 { 19 public: 20 LinkStack() { top = NULL; } 21 ~LinkStack(); 22 bool StackEmpty() 23 { return top ==NULL; } 24 void Push(T x); 25 void Pop(T &x); 26 T GetTop(); 27 28 private: 29 StackNode<T>*top; 30 }; 31 template<class T> //入栈 32 void LinkStack<T>::Push(T x) 33 { 34 StackNode<T> *p; 35 p = new StackNode<T>; 36 p->data = x; 37 p->next = top; 38 top = p; 39 } 40 template <class T> //返回栈顶元素 41 T LinkStack<T>::GetTop() 42 { 43 if (StackEmpty()) 44 { 45 cout << "为空" << endl; 46 return -1; 47 } 48 else return top->data; 49 } 50 template <class T> //出栈 51 void LinkStack<T>::Pop(T &x) 52 { 53 StackNode<T> *p = top; 54 if (StackEmpty()) 55 { 56 cout << "为空" << endl; 57 } 58 else 59 { 60 x = p->data; 61 top = p->next; 62 delete p; 63 } 64 } 65 template <class T> 66 LinkStack<T>::~LinkStack() //析构函数 67 { 68 StackNode <T> *s; 69 while (top) 70 { 71 s = top->next; 72 delete top; 73 top = s; 74 } 75 } 76 77 void conversion(int N, int d) //进制转换 78 { 79 LinkStack<int>S; 80 int i; 81 while (N) 82 { 83 S.Push(N%d); 84 N = N / d; 85 86 } 87 while (!S.StackEmpty()) 88 { 89 S.Pop(i); 90 cout << i; 91 92 } 93 cout << endl; 94 } 95 void main() 96 { 97 int N(64), d(2); 98 cout<<"十进制64转化为二进制:"; 99 conversion(N, d); 100 system("PAUSE"); 101 return; 102 }
原文:http://www.cnblogs.com/jamylu/p/4902564.html