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

来源:互联网 发布:中华人软件下载 编辑:程序博客网 时间:2024/05/22 17:08
#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;elsereturn 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);elseprintf("%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;}

原创粉丝点击