您的位置:首页 > 其它

栈的应用1——十进制转换任何进制

2016-11-06 11:45 337 查看
//十进制的转换问题

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

typedef struct List
{
char date;
struct List *next;
}NODE,*LNode;

typedef struct
{
LNode top;
int date;//计数器用来计数
}Stack,*SeqStack;

SeqStack init_satck();//初始化

int empty_stack(SeqStack);

void push_stack(SeqStack,char);

void pop_stack(SeqStack,char*);

void change(SeqStack,int,int);

char fun(int);//将int转换为char

int main(void)

{
int m,n;
SeqStack ps=init_satck();
printf("请输入十进制数:");
scanf("%d",&m);
printf("请输入转换的进制:");
scanf("%d",&n);
change(ps,m,n);

return 0;

}

SeqStack init_satck()

{
SeqStack ps;
if((ps=(SeqStack)malloc(sizeof(Stack)))==NULL)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else
{
ps->top=NULL;
ps->date=0;
}

return ps;

}

int empty_stack(SeqStack ps)
{
if(ps->top==NULL)
return 0;
else
return 1;
}

void push_stack(SeqStack ps,char ch)

{
LNode p=(LNode)malloc(sizeof(NODE));
p->date=ch;
p->next=ps->top;
ps->top=p;//就是变相的一个头插法
ps->date++;//个数加一

return ;

}

void pop_stack(SeqStack ps,char *ch)

{

LNode p=ps->top;
*ch=p->date;
ps->top=p->next;
free(p);
ps->date--;

}

char fun(int val)

{
char ch;
if(val>9)
{
ch=val-10+'A';
}
else
ch=val+'0';
return ch;

}

void change(SeqStack ps,int m,int n)

{
char ch;
printf("转换为:");
while(m)
{
push_stack(ps,fun(m%n));//此时我们压栈的字符。而fun函数就是将int转换为char行
m/=n;
}
while(empty_stack(ps))
{
pop_stack(ps,&ch);
printf(" %c",ch);
}
printf("\n");
return ;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: