栈的应用:十进制转八进制

来源:互联网 发布:淘宝一千零一夜干嘛的 编辑:程序博客网 时间:2024/05/22 17:31

PS:数据结构 48页栈的应用

十进制转换八进制

自己写了下。供大家参考,通过源码进一步学习数据结构。

 

此书全部给出算法思想

要自己多动手敲敲code,不能光看不敲,那是没用的,给你思路,你也照样写不出来

要做一个合格的程序员就努力的写代码。通过代码量反映你的能力

 

 

//利用栈实现进制间的转换
#include<stdio.h>
#include
<stdlib.h>
//#include<malloc.h>
#include<conio.h>
#define STACK_INIT_SIZE   100
#define STACKINCREMENT    10
typedef 
struct{
    
int *base;
    
int *top;
    
int stacksize;
}SqStack;
int InitStack(SqStack &S)//构造空栈
{
    S.
base = (int *)malloc(sizeof(int* (STACK_INIT_SIZE));
    
if(!S.base) exit(-1);
    S.top 
= S.base;
    S.stacksize 
= STACK_INIT_SIZE;
    
return 1;
}
int Push(SqStack &S, int e)//压栈
{
    
if(S.top - S.base >= S.stacksize)
    {
    S.
base = (int *)realloc(S.basesizeof(int* (STACK_INIT_SIZE + STACKINCREMENT));
    
if(!S.base) exit(-1);
    S.top 
= S.base + S.stacksize;
    S.stacksize 
+= STACKINCREMENT;
    }
    
*S.top++ = e;
    
return 1;
}
int  StackEmpty(SqStack S)//查看栈是否为空
{
    
if(S.base == S.top) return 1;
    
else return 0;
}
int  Pop(SqStack &S, int &e)//出栈
{
    
if(S.top == S.basereturn 0;
    e 
= *--S.top; 
    
return 1;
}
void conversion()//将十进制用栈转化为八进制
{
    SqStack S;
    
int N;
    
int e;
    InitStack(S);
    printf(
"输入N的值:");
    scanf(
"%d",&N);
    printf(
" 转换后的值:");
    
while(N)
    {
        Push(S, N 
% 8);
        N 
= N/8;
    }
    
while(!StackEmpty(S))
    {
        Pop(S,e);
        printf(
" %d",e);
    }
}
void main()
{
    conversion();
    getch();
}