#include <iostream> using namespace std; template <class T> class node { public: node<T>* next; T val; node():next(NULL),val(){}; node(T v):next(NULL),val(v){}; }; template <class T> class my_stack { public: my_stack(); ~my_stack(); void init_stack(); bool is_empty(); size_t get_len(); T* get_top(); void push(const T& e); void pop(T& e); void display(); private: node<T>* top; size_t len; }; template <class T> my_stack<T>::my_stack() { top = NULL; len = 0; } template <class T> my_stack<T>::~my_stack() { node<T>* pre = top; if (top) { delete top; top = pre->next; pre = pre->next; } len = 0; } template <class T> bool my_stack<T>::is_empty() { return len == 0; } template <class T> size_t my_stack<T>::get_len() { return len; } template <class T> void my_stack<T>::push(const T& e) { node<T>* tmp = new node<T>(e); if (top == NULL) { top =tmp; } else { tmp->next = top; top = tmp; } ++len; } template <class T> void my_stack<T>::pop(T& e) { if(is_empty()) throw new exception("The stack is empty!"); e = top->val; if (len ==1) { top = NULL; } else { node<T>* tmp = top; top = top->next; delete tmp; } --len; } template <class T> void my_stack<T>::display() { node<T>* pre = top; cout << "The stack is: "; while(pre) { cout << pre->val << " "; pre = pre->next; } cout << endl; } void conversion(int N,int s) { my_stack<int> sq; while (N) { sq.push(N%s); N /= s; } int e = 0; while(!sq.is_empty()) { sq.pop(e); cout << e << " "; } } int main() { conversion(72,8); }
为什么在转换中不用数组:栈的引入简化了程序设计的问题,划分了不同的关注层次,使思考范围减小了;
而数组不仅掩盖了问题的本质,还要分散精力去考虑数组下标增减的细节问题。
数值转换
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:OS笔记1
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
javascript显示转换 javascript数值转换
JavaScript基础(一)之数值转换有3个函数可以把非数值转换为数值: Number();parseInt();parseFloat();Number()函数,即转型函数,可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。Number()函数的转型规则如下: 如果是Boolean值,true和false将分别被转换为1和0;如果是数字值,只是简单的传入和返回
javascript显示转换 javascript numberic conversion 字符串 十六进制