Skip to content
c
#define TRUE   1
#define FALSE  0
#define OK     1
#define ERROR  0
#define IBFEASIBLE  -1
#define OVERFLOW    -2  
typedef  int   Status;


#define  nullE  -1
typedef  int  ElemType;

typedef struct {
    ElemType *base;
    ElemType *top;
    int size; 
} *SqStack;

SqStack InitStack(int size) {   
   SqStack S;
   if (!(S = (SqStack)malloc(sizeof(*S)))) exit(OVERFLOW);  
   if (!(S->base = (ElemType*)calloc(size, sizeof(ElemType)))) exit(OVERFLOW);
   S->top = S->base;   S->size = size;
   return S;   
}

SqStack FreeStack(SqStack S) {
   if (S) { free(S->base);   free(S); }  return NULL;
}

void ClearStack(SqStack s) {
    s->top = s->base;
}

ElemType GetTop(SqStack S) {   
   if (!S || S->top == S->base) return nullE; 
   return *(S->top-1);                        
}

Status Push(SqStack S, ElemType e) {  
   ElemType *newbase;
   if (!S) return ERROR;               
   if (S->top - S->base >= S->size) {  
      S->base = (ElemType*)realloc(S->base, S->size*2*sizeof(ElemType));
      if (!S->base) exit(OVERFLOW);   
      S->top = S->base + S->size;     
      S->size *= 2;                   
   }
   *S->top++ = e;                     
   return OK;
}

ElemType Pop(SqStack S) {    
   if (!S || S->top == S->base) return nullE; 
   return *--S->top;  
}

Status StackEmpty(SqStack S) {
   if (S->top == S->base) return TRUE;
   else return FALSE;
}

int f(char *s) {
   char start[8], *end;
   return strtol(s, &end, 8);
}

char *conversion(int Num, int radix) {  
   
   ElemType e;  int i; char c;  char *vs;
   SqStack S;
   S = InitStack(6, 3);      
   if(!(vs = (char*)malloc(10*sizeof(char)))) return NULL;
   while (Num) {
      Push(S, Num % radix);
      Num /= radix;
   }
   for (i=0; !StackEmpty(S); i++) {
      e = Pop(S);
      vs[i] = e < 10 ? '0'+e : 'a'+(e-10);
   }
   vs[i] = '\0';
   return vs;
}

int conversion1(int Num, char *s) {  
   
   ElemType e;  int i;  SqStack S;
   S = InitStack(6, 3);      
   while (Num) {
      Push(S, Num%8);
      Num = Num/8;
   }
   for(i=0; !StackEmpty(S); i++) {
      e = Pop(S);  s[i] = '0'+e;
   }
   s[i] = '\0';   
   return strtol(s, &s, 8);
}

int conversion2(int Num, char *s) {  
   
   ElemType e;
   int i, d, cv;  
   d = 1;
   while (Num) {
      cv += d*(Num % 8);   
      d *= 8;
      Num = Num/8;
   }
   return cv;
}

持之苟有恒,久久自芬芳