该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 0
#define ERROR 1
#define OVERFLOW -1
#define SElemType int
#define Status int
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 OVERFLOW;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status GetTop( SqStack S,SElemType &e )
{
if(S.top=S.base) return ERROR;
e=*(S.top-1);
return OK;
}
Status Push( SqStack &S,SElemType e )
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType * )realloc( S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)return OVERFLOW;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)return ERROR;
e=* --S.top;
return OK;
}
bool StackEmpty( SqStack S )
{
if( S.top==S.base)
return true;
else
return false;
}
void Conversion(int N,int mod)
{
if(mod>=2 && mod<=36)
{
SqStack S;
InitStack(S);
int temp;
while(N)
{
temp=N%mod;
temp=(temp<10)?temp:('A'+temp-10);
Push(S,temp);
N/=mod;
}
SElemType e;
while(!StackEmpty(S))
{
Pop(S,e);
char c;
c=(e<10)?(e+'0'-0):e;
printf("%d",e);
}
}
else
printf("mod is illegal!\n");
}
void main()
{
SElemType e ;
char c ;
SqStack S ;
InitStack( S ) ;
for( c='A'; c<='Z';c++)
Push( S, (SElemType) c) ;
while( !StackEmpty( S ))
{
Pop( S, e ) ;
printf("%c ", (char)e) ;
Conversion(e,16);
printf("\n");
}
}