数据结构示例之十进制转换其他进制

以下为“十进制数转换为其他进制数”的示例:

1. 用c语言实现的版本

#include <stdio.h>
#include <stdlib.h>

#define StackSize 100 /* 假定预分配的栈空间最多为100个元素 */  	
typedef int DataType; /*假定栈元素的数据类型为整型 */

typedef struct{
	DataType data[StackSize];
	int top;
}SeqStack;

/* 初始化,将顺序栈置空 */
void Initial(SeqStack *S)
{
	S->top = -1;
}

/* 判断栈是否为空 */
int IsEmpty(SeqStack *S)
{
	return S->top == -1;
}

/* 判断栈是否已满 */
int IsFull(SeqStack *S)
{
	return S->top == StackSize - 1;
}

/*进栈*/
void Push(SeqStack *S, DataType x)
{
	if (IsFull(S))
	{
		printf("栈上溢"); /* 上溢,退出运行 */
		exit(1);
	}
	S->data[++S->top] = x;/* 栈顶指针加1后,将x入栈 */
}

/*出栈*/
DataType Pop(SeqStack *S)
{
	if (IsEmpty(S))
	{
		printf("栈为空"); /*下溢,退出运行*/
		exit(1);
	}
	return S->data[S->top--];/*栈顶元素返回后,将栈顶指针减1*/
}

/* 取栈顶元素*/
DataType Top(SeqStack *S)
{
	if (IsEmpty(S))
	{
		printf("栈为空"); /*下溢,退出运行*/
		exit(1);
	}
	return S->data[S->top];
}

/*假设N是非负的十进制整数,输出等值的B进制数*/
void MultiBaseOutput(int N, int B)
{
	int i;
	SeqStack S;

	/* 初始化,将顺序栈置空 */
	Initial(&S);

	/*从右向左产生B进制的各位数字,并将其进栈*/
	while (N)
	{  
		Push(&S, N%B); /* 将bi进栈 0<=i<=j */
		N = N / B;
	}

	/*栈非空时,退栈输出*/
	while (!IsEmpty(&S))
	{  
		i = Pop(&S);
		printf("%d", i);
	}
}

void main()
{
	int ordNum; //1023
	int base; //2

	printf("请输入十进制数:\n");
	scanf("%d", &ordNum);
	printf("请输入转换进制:(n>=2)\n");
	scanf("%d", &base);

	printf("转换结果为:\n");
	MultiBaseOutput(ordNum, base);
	printf("\n");
}
运行结果如下图所示:



没有更多推荐了,返回首页