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.base, sizeof(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.base) return 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();
}
#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.base, sizeof(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.base) return 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();
}