#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 0
typedef 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;
}
数据结构-栈--进制转换
最新推荐文章于 2024-07-13 08:21:27 发布