现在的位置: 首页 > 综合 > 正文

利用堆栈进行数制转换

2019年10月02日 ⁄ 综合 ⁄ 共 662字 ⁄ 字号 评论关闭

下面以无符号十进制转换为八进制为例简述数制转换问题。将十进制数num转换为八进制可以反复执行以下步骤得到:

1,将num除以8,取其余数

2,判断num除以8的商:

    若商为零,则转换到此结束;

    若商不为零,则将商送num,转到第1步。

算法描述如下:

/* 将无符号十进制数转换为八进制数 */

/* 堆栈采用顺序存储结构 */
#define M 100
void conversion( int num ){
	int stack[ M ], int top = -1;
	do{
		stack[ ++top ] = num % 8;   /* 将本次取得的余数进栈 */
		num = num / 8;
	}while( num != 0 );

	while( top != -1 ){
		printf( "%d", stack[ top-- ] );  /* 依次退栈 */
	}
}

/* 堆栈采用链式存储结构 */
typedef struct node{
	int data;
	struct node *link;
}STNode, *STLink;

void conversion( int num ){
	STLink p, top = NULL;
	do{
		p = ( STLink )malloc( sizeof( STNode ) );
		if( p != NULL ){
			p->data = num % 8;    /* 将本次取得的余数进栈 */
			p->link = top;
			top = p;
			num = num / 8;       /* 求得num除以8的商 */
		}
	}while( num != 0 );

	while( top != NULL ){
		p = top;
		printf( "%d", top->data );
		top = top->link;     /* 依次退栈 */
		free( p );           /* 释放链接点空间 */
	}
}

抱歉!评论已关闭.