采用顺序栈完成进制转换

采用顺序栈完成进制转换

1)定义顺序栈的存储结构;

2)实现顺序栈的初始化、判断是否为空、进栈、出栈等基本操作;

3)调用顺序栈的基本操作实现进制转换。


代码:

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
using namespace std;
typedef int SElemType;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef struct {
	SElemType *base;//在栈构造和销毁之前,base的值为NULL;
	SElemType *top;//栈顶指正
	int stacksize;//当前已经分配的存储空间
}SqStack;

int n, m;
int e;
SqStack S;
//调用基本操作实现进制转换

//栈的初始化 空栈
bool InitSack(SqStack &S) {
	S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
	if (!S.base) return false;
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return true;
}

//判断是否为空
bool StackEmpty(SqStack &S)
{
	if (S.top == S.base) return false;
	return true;
}

//进栈
bool Push(SqStack &S, int e)
{
	if (S.top - S.base >= S.stacksize) {//栈满,追加空间
		S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
		if (!S.base) return false;
		S.top = S.base + S.stacksize;
		S.stacksize += STACKINCREMENT;
	}
	*S.top++ = e;
	return true;
}

//出栈
void Pop(SqStack &S, int &e)
{//若栈不空。删除栈顶元素,用e返回值
	e = *--S.top;
}

//进制转换
void conversion()
{
	if (!InitSack(S))
	{
		printf("内存分配失败!\n");
		return;
	}
	printf("%d用%d进制表示为:", n, m);
	while (n) {
		if (Push(S, n%m)) {
			n = n / m;
		}
		else {
			printf("内存分配失败!\n");
			break;
		}
	}
	while (StackEmpty(S)) {
		Pop(S, e);
		printf("%d", e);
	}
	printf("\n");
}
int main()
{
	printf("请输入一个非负十进制数:");
	scanf("%d", &n);
	printf("请输入转换进制:");
	scanf("%d", &m);
	conversion();
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值