十进制和其他进制d转换原理:
N=(N/d)*d+N%d;
例如:(1348)10=(2504)8,其运算过程如下:
N N/d
N%d
1348 168
4
168 21 0
21 2 5
2 0 2
栈的应用
代码如下:
-
#include <stdio.h>
-
#include<stdlib.h>
-
-
typedef struct Stack
-
{
-
int *top;
-
int *base;
-
int stacksize;
-
};
-
-
int main(void)
-
{
-
int N = 1348;
-
int d = 8;
-
struct Stack S;
-
//初始化栈
-
S.base = (int *)malloc(100*sizeof(int));
-
if (!S.base)
-
{
-
printf("分配内存失败!\n");
-
exit(0);
-
}
-
S.top = S.base;
-
//压入栈
-
while (N)
-
{
-
*S.top++ = (N%d);
-
N = N/d;
-
}
-
//弹出栈
-
printf("转化为%d进制后是: ", d);
-
while (S.base != S.top)
-
{
-
printf("%d", *--S.top);
-
}
-
printf("\n");
-
-
return 0;
-
}
栈满:S.top-S.base>=stacksize.
类似代码框架:
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
#define STACK_INIT_SIZE 100 //存储空间初始分配量
-
#define STACKINCREMENT 10 //存储空间分配增量
-
#define OVERFLOW 0
-
#define OK 0
-
#define ERROR 0
-
#define TRUE 1
-
#define FALSE 0
-
-
typedef int SElemType;
-
typedef int Status;
-
-
typedef struct
-
{
-
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
-
SElemType *top; // 栈顶指针
-
int stacksize; // 当前已分配的存储空间,以元素为单位
-
}SqStack;
-
-
Status InitStack(SqStack S)
-
{
-
S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
-
if(!S.base) exit(OVERFLOW); //存储分配失败
-
S.top = S.base;
-
S.stacksize = STACK_INIT_SIZE;
-
return OK;
-
} // InitStack
-
-
Status StackEmpty(SqStack S)
-
{
-
//若栈S为空栈,则返回TRUE,否则返回FALSE
-
if(S.top == S.base)
-
return TRUE;
-
else
-
return FALSE;
-
}
-
-
Status Push (SqStack *S,SElemType e)
-
{
-
// 插入元素e为新的栈顶元素
-
if(S->top-S->base >= S->stacksize)
-
{
-
// 栈满增加存储空间
-
S->base = (SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*
-
sizeof (SElemType));
-
if(!S->base) exit(OVERFLOW); // 存储分配失败
-
S->top = S->base+S->stacksize;
-
S->stacksize += STACKINCREMENT;
-
}
-
*S->top ++= e;
-
-
return OK;
-
}
-
-
Status Pop(SqStack *S,SElemType *e)
-
{
-
//若栈不空,则删除S的栈顶元素,用e返回起值,并返回OK,否则返回ERROR
-
if(S->top == S->base)
-
return ERROR;
-
*e = *(--S->top);
-
-
return OK;
-
} //Pop
-
void conversion()
-
{
-
// 对于输入的任意一个非负十进制数,打印输出与其等值的八进制数
-
int N;
-
int e = 0;
-
SqStack S;
-
InitStack(S);
-
//构造一个空的栈S
-
S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
-
if(!S.base)
-
exit(OVERFLOW); //存储分配失败
-
S.top = S.base;
-
S.stacksize = STACK_INIT_SIZE;
-
printf("请输入十进制数: ");
-
scanf("%d",&N);
-
while(N)
-
{
-
Push(&S,N%8);
-
N = N/8;
-
}
-
-
while(!StackEmpty(S))
-
{
-
Pop(&S,&e);
-
printf("%d",e);
-
}
-
} // conversion
-
void main()
-
{
-
conversion();
-
}
递归的应用
-
#include <stdio.h>
-
-
void Tobinary(int n);
-
-
int main()
-
{
-
int num;
-
printf("请输入一个整数: ");
-
scanf("%d", &num);
-
Tobinary(num);
-
return 0;
-
}
-
void Tobinary(int n)
-
{
-
if (n>=8)
-
Tobinary(n/8);
-
printf("%d", n%8);
-
}
阅读(1947) | 评论(0) | 转发(0) |