数据结构—进制转换完整C语言代码[指南]
/*以下为顺序栈实现方式*/
#include "stdio.h"
#define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 #define OVERFLOW -1 #define OK 2 #define YES 1 #define NO 0 #define ERROR -2 typedef int Selemtype;
typedef int Status;
typedef struct{
Selemtype *base;
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;
}
Status Emptystack(Sqstack *S){
if(S->base==S->top) return YES;
else return NO;
}
Status Push(Sqstack *S,Selemtype e){
if (S->top-S->base>=S->stacksize)
{S->base=(Selemtype *)realloc(S->base,(S->stacksize+STACK_INCREMENT)*sizeof(Selemtype));
if (!S->base) exit (OVERFLOW);
S->top=S->base+S->stacksize;
S->stacksize+=STACK_INCREMENT;}
*S->top++=e;
return OK;
}
Status Pop(Sqstack *S,Selemtype *e){
if(S->top==S->base) return ERROR;
*e=*--S->top;
return OK;
}
main()
{
int *e,m,n;
Sqstack *s;
Initstack(s);
clrscr(); /*清屏函数,不同编译系统函数不同*/
printf("input m,n:\n");/*m是待转换的数,n是要转换的几进制*/
scanf("%d%d",&m,&n);
while(m)
{
Push(s,m%n);
m=m/n;
}
printf("the arranged NO. is:");
while(!Emptystack(s))
{
Pop(s,e);
if(*e>9) {*e=*e+'A'-10;printf("%c",*e);}/*十进制以上数用字母A、B、C……代替,即10
为A,11为B*/
else printf("%d",*e);
}
}
/*本程序使用栈的顺序
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示法,本人自己编写并已在turbo c中调试,100%可正确运行,若
移植到VC6.0环境中,只需修改部分即可*/ /*THE END*/
/*以下为链栈实现方式*/ #include
#include #define TRUE 1
#define FALSE 0 #define OK 0
#define ERROR -1 typedef struct SNode{
int data;
struct SNode *next; }SNode;
typedef struct{
int length;
SNode *top;
}STACK;
void InitStack(STACK *S){
S->top=NULL;S->length=0; }
int Push(STACK *S,int e){
SNode *p;
p=(SNode *)malloc(sizeof(SNode));
if(!p) return ERROR;
p->data=e;p->next=S->top;
S->top=p;S->length++;
return OK;
}
int Pop(STACK *S,int *e){
SNode *p;
if(S->top==NULL) return ERROR;
p=S->top;*e=p->data;
S->top=p->next;S->length--;
return OK;
}
int Empty(STACK S){
if(S.top==NULL) return TRUE;
return FALSE;
}
int main(){
int m,n,*e;
STACK S;
printf("input m,n:\n");
scanf("%d%d",&m,&n);
InitStack(&S);
while(m)
{
Push(&S,m%n);
m=m/n;
}
printf("the arranged NO. is:");
while(!Empty(S))
{
Pop(&S,e);
if(*e>9) printf("%c",*e+'A'-10);
else printf("%d",*e); }
putchar('\n');
}
/*本程序采用链栈的表示方法,同学编写,本人已在TURBO C中调试,100%可正确运行,
若转移到其他环境中,只需修改部分即可*/ /*THE END*/