您的位置:首页 > 其它

利用堆栈进行数制转换

2011-12-21 00:25 169 查看
下面以无符号十进制转换为八进制为例简述数制转换问题。将十进制数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 );           /* 释放链接点空间 */
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: