利用栈实现二、八、十六进制的转换:
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
#define MAX 1024
typedef struct stack
{
ElementType data[MAX];
int top;
}Stack;
Stack * CreateStack(void)
{
Stack *s = (Stack *)malloc(sizeof(Stack));
s->top = -1;
return s;
}
int StackEmpty(Stack *s)//判断栈空
{
if(s)
{
if(s->top == -1)
return 1;
else
return 0;
}
return -1;
}
int StackFull(Stack *s)//判断栈满
{
if(s)
{
if(s->top == MAX - 1)
return 1;
else
return 0;
}
return -1;
}
void Push(Stack *s,ElementType m)//进栈
{
if(StackFull(s) == 0)
{
s->data[++s->top] = m;// ++s->top; s->data[s->top] = m;
}
}
ElementType Pop(Stack *s)//出栈
{
if(StackEmpty(s) == 0)
return s->data[s->top--];
}
void ClearStack(Stack *s)
{
s->top = -1;
}
void DestroyStack(Stack *s)
{
s->top = -1;
free(s);
s = NULL;
}
int main(int argc,char *argv[])
{
Stack *s = CreateStack();
ElementType x,m,n;
scanf("%d%d",&x,&n);
while(1)
{
if(x != 0)
{
if(n == 16)
{
m = x%n;
if(m>9)
{
m = 'A'+(m-10);
}
x = x/n;
}
else
{
m = x%n;
x = x/n;
}
Push(s,m);
}
else
break;
}
while(StackEmpty(s) == 0)
{
m = Pop(s);
printf("%d",m);
}
printf("\n");
DestroyStack(s);
s = NULL;
return 0;
}