디지털 변환 (C 언어 구현)

#include<stdio.h>
#include<stdlib.h> 
typedef int SElemType ;
unsigned n;//    
int N;
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define STACKINCREMENT 1
#define STACK_INIT_SIZE 10
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)
  return ERROR;//      
 S.top=S.base;//             
 S.stacksize=STACK_INIT_SIZE;
 return OK;
}
Status StackEmpty(SqStack S)
{
 //  S   (       ),   OK,    ERROR
 if(S.top==S.base)
  return OK;
 else
  return ERROR;
}
Status Push(SqStack &S,SElemType e)
{
 //    e       
 if(S.top-S.base>=S.stacksize)//  ,      
 {
  S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
  if(!S.base)
   return ERROR;
  S.top=S.base+S.stacksize;
  S.stacksize+=STACKINCREMENT;
 }
 *S.top++=e;//     ++*     ,         ,     
 return OK;
}
Status GetTop(SqStack S,SElemType *e)
{
 if(S.base<S.top)
 {
  *e=*(S.top-1);
  return OK;
 }
 else return ERROR;
}
Status Pop(SqStack &S,SElemType &b)
{
 //    ,   S     , e    ,   OK,    ERROR
 if(S.top==S.base)
  return ERROR;
    b = * --S.top;//     --*     ,         ,     
 return OK;
}

Status StackTraverse(SqStack S,int(*visit)(SElemType))
{
while(S.top>S.base)
 {
         visit(*S.base);
   S.base++;
 
 }
 printf("
");  return OK; } Status visit(SElemType c) {  printf("%d", c);  return OK; } void conversion() {   // , N  SqStack s;  SElemType e;  InitStack(s);//          while(n)// n 0  {   Push(s,n%N);// n N (N )   n=n/N;  }  printf(" :");  while(!StackEmpty(s))  {   Pop(s,e);// e   printf("%d",e);  }  printf("
"); } void main() {  int y;  char c;  printf(" 1. n
 2. m
 3.  
 4. ?(y/n?)
");    while(1)  {   printf(" 1-4
");   scanf("%d",&y);   if(y==1)   {    printf("
");    scanf("%d", &n);   }else     if(y==2)    {     printf("
");     scanf("%d", &N);    }else     if(y==3)     {      printf("
");      conversion();     }else      if(y==4)      {       printf(" y or Y to continue or n or N to quit
");       scanf("%c",&c);       if(c == 'n' || c == 'N')        break;             }      else      {       printf("
");      }  } }

좋은 웹페이지 즐겨찾기