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

来源:互联网 发布:黑龙江科技大学网络课 编辑:程序博客网 时间:2024/06/02 00:20
//十进制的转换问题
#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 ;
}
0 0
原创粉丝点击