c语言八进制换十进制顺序栈的应用,c语言:顺序栈的应用-进制转换

#include#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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值