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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: