数据结构-栈--进制转换

2017-11-12 19:02:11来源:CSDN作者:qq_30277983人点击

分享
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */#define STACK_INCREMENT 2 /* 存储空间分配增量 */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 0typedef struct SqStack{	int *base; /* 在栈构造之前和销毁之后,base 的值为 NULL */	int *top; /* 栈顶指针 */	int stacksize; /* 当前已分配的存储空间,以元素为单位 */}SqStack; /* 顺序栈 */void InitStack(SqStack *s){ /* 构造一个空栈 S */	s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));	if(!s->base)		exit(OVERFLOW); /* 存储分配失败 */	s->top=s->base;	s->stacksize=STACK_INIT_SIZE;}int StackEmpty(SqStack s){ /* 若栈 S 为空栈,则返回 TRUE,否则返回 FALSE */	if(s.top==s.base)		return TRUE;	else		return FALSE;}int StackLength(SqStack s){ /* 返回 S 的元素个数,即栈的长度 */	return s.top-s.base;}void Push(SqStack *s,int e){ /* 插入元素 e 为新的栈顶元素 */	if(s->top-s->base>=s->stacksize) /* 栈满,追加存储空间 */	{		s->base=(int *)realloc(s->base,(s->stacksize+STACK_INCREMENT)*sizeof(int));		if(!s->base)			exit(1); /* 存储分配失败 */		s->top=s->base+s->stacksize;		s->stacksize+=STACK_INCREMENT;	}	*(s->top)++=e;//*s->top=e;s->top++;}int Pop(SqStack *s,int *e){ /* 若栈不空,则删除 S 的栈顶元素,用 e 返回其值,并返回 OK;否则返回 ERROR */	if(s->top==s->base)		return ERROR;	*e=*--s->top;	return OK;}void DestoryStack(SqStack *s){	if(s->base)		free (s->base);}void conversion(int i){ /* 对于输入的任意一个非负 10 进制整数,打印输出与其等值的 16 进制数 */	SqStack s;	int n; /* 非负整数 */	int e;	InitStack(&s); /* 初始化栈 */	printf("将 10 进制整数 n 转换为 %d 进制数/n 请输入 n( >0 ):",i);	scanf("%d",&n); /* 输入非负十进制整数 n */	while(n) /* 当 n 不等于 0 */	{		Push(&s,n%i); /* 入栈 n 除以 i 的余数(i 进制的低位) */		n=n/i;	}	while(!StackEmpty(s)) /* 当栈不空 */	{		Pop(&s,&e); /* 弹出栈顶元素且赋值给 e */		if(e<=9)		printf("%d",e);		else		printf("%c",e+55); /* 大于 9 的余数,输出相应的字符*/	}	printf("/n");	DestoryStack(&s);}int menu(){	int i;	while(1)	{		puts("/t*************进制转换**************");		puts("/t/t1. 10进制转换成2进制");		puts("/t/t2. 10进制转换成8进制");		puts("/t/t3. 10进制转换成16进制");		puts("/t/t0. 退出");		printf("/t请输入指令:");		scanf("%d",&i);		system("cls");		switch(i){			case 1:				conversion(2); break;			case 2:				conversion(8); break;			case 3:				conversion(16); break;			case 0:				return 0;		}	}}int main(){	menu();	system("pause");	return 0;}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台