c语言:顺序栈的应用-进制转换
2016-03-27 23:25
183 查看
#include<stdio.h> #include<math.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 using namespace std; typedef struct Stack //结构体定义 { int *elem; //数据域 int top; //顺序栈栈顶 int stacksize; //顺序栈当前长度 }Stack; //函数声明部分 void Error(char *s); //错误处理函数 void Init_Stack(Stack & l);//顺序栈的初始化 void Destroy_Stack(Stack & l); //销毁顺序栈 void Clear_Stack(Stack & l); //清空顺序栈 void Push_Stack(Stack &L, int e); //压栈操作函数 void Pop_Stack(Stack &L, int e); //出栈操作函数 void Increment_Stack(Stack & l); //增加顺序栈空间函数 void Conversion_Stack(Stack &l); //进制转换函数 //函数实现部分 void Error(char *s) { cout << s << endl; exit(1); } void Init_Stack(Stack &l) { l.elem = new int[STACK_INIT_SIZE]; if (!l.elem) Error("内存分配失败!"); l.top = -1; l.stacksize = STACK_INIT_SIZE; } void Destroy_Stack(Stack &l) { delete[] l.elem; l.top = -1; l.stacksize = 0; cout << "该顺序栈销毁成功!" << endl; } void Clear_Stack(Stack &l) { l.top = -1; } void Increment_Stack(Stack &l) { int *newstack = new int[l.stacksize + STACK_INCREMENT]; if (!newstack) Error("存储分配失败!"); for (int i = 0; i < l.top; i++) { newstack[i] = l.elem[i]; } l.elem = newstack; delete[] l.elem; l.stacksize += STACK_INCREMENT; } void Push_Stack(Stack &l, int e) { if (l.top == (l.stacksize - 1)) Increment_Stack(l); l.elem[++l.top] = e; } void Pop_Stack(Stack &l, int e) { if (l.top == -1) Error("该顺序栈为空栈!"); e = l.elem[l.top--]; cout << e; } void Conversion_Stack() { Stack s; Init_Stack(s); int N = 0; int D = 0; int e = 0; cout << "请输入要转化的十进制数:"; cin >> N; cout << "请输入要转化的进制数:"; cin >> D; while (N) { Push_Stack(s, N%D); N = N / D; } while (!(s.top == -1)) { Pop_Stack(s, e); } cout << endl; Destroy_Stack(s); } int main() //主函数测试三次 { Conversion_Stack(); Conversion_Stack(); Conversion_Stack(); return 0; }
相关文章推荐
- QML与C++交互:登陆界面设计
- C++第二次作业
- C++ 构造函数的具体执行步骤
- 一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)
- 【智能指针的延伸】两种定制删除器的实现方法
- C++混合编程之idlcpp教程Python篇(3)
- 高级强制类型转换
- C++学习
- C/C++知识点整理(3)
- 如何避免内存泄漏
- 副本构造器
- gets和scanf函数初篇
- c语言实现des加密
- c++实验2—标准体重
- 关于C++中delete和delete[]的差别
- 表面静如处子其实动如脱兔的static
- C++第二次上机实验-3
- c++实验2-标准体重
- 想找C++开发职位必读的书,以及其他条件
- C++学习笔记55——类模板的输入输出操作符