数制转换
2010-05-05 22:18
134 查看
/////////////////////////////////// //Stack应用 #include "stdio.h" #include"malloc.h" #define MAXSIZE 100 typedef int DataType; typedef struct node { int top; DataType data[MAXSIZE]; }SeqStack,*PSeqStack; PSeqStack init_stack(void)//建立空栈 { PSeqStack S; S=(PSeqStack)malloc(sizeof(SeqStack)); if(S) S->top=-1; return S; } PSeqStack init_stack(PSeqStack S,int n)//建立实栈 { int i; S=(PSeqStack)malloc(sizeof(SeqStack)); if(S){ S->top=-1; if(n<MAXSIZE) { for(i=0;i<n;i++) { int x; scanf("%d",&x); S->data[i]=x; S->top++; } } } else printf("空栈建立不成功也就没法建立实栈!"); return S; } void output_stack(PSeqStack S)//输出栈内数据而不改动栈 { int i; for(i=S->top;i>=0;i--) { printf("%d",S->data[i]); } } void Destory_stack(PSeqStack *SeqStackpoint)//用后销毁栈 { if(*SeqStackpoint) free(*SeqStackpoint); *SeqStackpoint=NULL; return ; } int Push_stack(PSeqStack S,DataType x)//入栈操作 { if(S->top==MAXSIZE-1) return 0;//栈满无法插入 else { S->top++; S->data[S->top]=x; return 1; } } int Empty_stack(PSeqStack S)//判断栈是否为空操作 { if(S->top==-1) return 1; else return 0; } int Pop_stack(PSeqStack S,DataType *x)//弹出栈操作 { if(Empty_stack(S)) return 0; else { *x=S->data[S->top]; S->top--; return 1; } } ////////////////////////////////////////////////////////// //全部包括新建空表;判断空栈;入栈操作;出栈操作;栈的销毁 int conversion(int N,int r)//数制转换N为输入目的数,r为数制 { PSeqStack S; DataType x; if(!r) { printf("基数不能为0"); return 0; } S=init_stack(); if(!S) { printf("初始化空栈失败"); return 0; } while(N) { int yu; yu=N%r; Push_stack(S,yu); N=N/r; } //output_stack(S); while(!Empty_stack(S)) { Pop_stack(S,&x); if(r=16&&x>=10) { switch(x) { case 10:printf("A");break; case 11:printf("B");break; case 12:printf("C");break; case 13:printf("D");break; case 14:printf("E");break; case 15:printf("F");break; } } else printf("%d",x); } printf("/n"); Destory_stack(&S); return 1; } void main(){ //PSeqStack S; //S=init_stack(); //S=init_stack(S,10); //Empty_stack(S); int N,r; printf("输入目的数:/n",&N); scanf("%d",&N); printf("输入进制:/n",&r); scanf("%d",&r); conversion(N,r); //output_stack(S); //Destory_stack(&S); } |