您的位置:首页 > 其它

栈的基本操作以及整数数制转换的测试

2011-05-26 13:38 134 查看
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef int StackElemType;

typedef struct
{
StackElemType *base;
StackElemType *top;
int stacksize;
}SqStack;

void InitStack(SqStack *S)
{
S->base=(StackElemType *)malloc( Stack_Init_Size *sizeof(StackElemType));
if(!S->base)exit(0);
S->top=S->base;
S->stacksize=Stack_Init_Size;
}

void Push(SqStack *S,StackElemType e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(StackElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(StackElemType));
if(!S->base)exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
}

int Pop(SqStack *S,StackElemType e)
{
if(S->top==S->base)return 0;
e=*--S->top;
return e;
}

int GetTop(SqStack *S,StackElemType e)
{
if(S->top==S->base) return 0;

e=*(S->top-1);
return e;
}

int StackEmpty(SqStack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}

void conversion(SqStack *S,int n,int r)
{
printf("十进制正整数%d转换为%d进制为:/n",n,r);
while(n)
{
Push(S,n%r);
n=n/r;
}
while(!StackEmpty(S))
{
StackElemType e=Pop(S,e);
switch(e)
{
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;
default: printf("%d",e);
}
}
printf("/n");

}

void main()
{
int n,r;
SqStack S;
InitStack(&S);
printf("Input the Positive Integer:/n");
scanf("%d",&n);
printf("Input the coversion type:/n");
scanf("%d",&r);
conversion(&S,n,r);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: