今天给各位分享c语言用栈进制转换的知识,其中也会对c语言用栈进制转换吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、c语言用栈实现八进制转十进制,完整程序,求解2、用栈实现,输入一个十进制数,转换成十六进制输出(C语言)3、数据结构 栈 进制转换,用C语言描述
c语言用栈实现八进制转十进制,完整程序,求解
以下是我自己写的一个十进制数转化成任意进制数的程序,请参考:
#includestdio.h
#includemalloc.h
#define
STACKSIZE
100
#define
StackIncrement
10
typedef
struct{
int
*base;
int
*top;
int
stacksize;
}SqStack;
SqStack
S;
int
w;
void
InitStack(){
S.base=(int*)malloc(STACKSIZE*sizeof(int));
if(!S.base)printf(“存储空间已满\n”);
else
{S.top=S.base;
S.stacksize=STACKSIZE;
}
}
void
GetTop(){
int
e;
if(S.top==S.base)printf(“该栈为空\n”);
else
e=*(S.top-1);
}
void
Push(int
e){
if(S.top-S.baseS.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(int));
if(!S.base)printf(“存储空间已满\n”);
else
{S.top=S.base+S.stacksize;
S.stacksize+=StackIncrement;
}
}
else
*S.top++=e;
}
void
Pop(){
if(S.top==S.base)printf(“该栈为空,不能删除\n”);
w=*–S.top;
}
void
conversion()
{InitStack();
int
n,d,l;
printf(“请输入一个十进制数:
“);
scanf(“%d”,n);
printf(“\n”);
printf(“\n”);
printf(“请输入你要转化成的制数:
(小于10)
“);
scanf(“%d”,d);
printf(“\n”);
printf(“\n”);
printf(“%d转换成%d进制的数为:”,n,d);
while(n)
{Push(n%d);
n=n/d;
}
while(!(S.top==S.base)){Pop();printf(“%d”,w);}
printf(“\n”);
printf(“\n================================================================================”);
printf(“\n
☆
继续
请按:1\n”);
printf(“
☆
退出
请按:2\n”);
printf(“\n================================================================================”);
scanf(“%d”,l);
switch(l)
{case
1
:printf(“\n”);conversion();break;
case
2
:break;
}
}
void
main()
{printf(“********************************************************************************\n”);
printf(“
☆
欢迎进入数制转换系统
☆\n”);
printf(“\n”);
printf(“
设计者:马兆瑞(信息09-2班)”);
printf(“********************************************************************************\n”);
conversion();
}
用栈实现,输入一个十进制数,转换成十六进制输出(C语言)
工具/材料:以Microsoft Visual Studio 2010为例。
1、首先在桌面上,点击“Microsoft Visual Studio 2010”图标。
2、然后在该界面中,先定义栈最大的存储空间。
2、其次在该界面中,编写初始化空栈函数代码。
3、之后在该界面中,编写判断空栈函数代码。
4、接着在该界面中,编写判断栈满函数代码。
5、其次在该界面中,编写进栈、出栈函数代码。
6、接着在该界面中,编写进制转化函数代码。
7、之后在该界面中,编写清空栈函数代码。
8、最后在该界面中,编写主函数调用各个函数代码。
数据结构 栈 进制转换,用C语言描述
#include stdio.h
#include stdlib.h
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 50
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
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) exit (OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status DestroyStack( SqStack S)
{ if (!S.base) return ERROR; // 若栈未建立(尚未分配栈空间)
free (S.base); // 回收栈空间
S.base = S.top = NULL;
S.stacksize = 0;
return OK;
} // DetroyStack
Status Push(SqStack S, char e)
{ //插入元素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;
}//Push
Status Pop(SqStack S, char e)
{ //若栈不空,则删除S的栈顶元素
//用e返回其值,并返回OK;否则返回ERROR
if(S.top==S.base) return ERROR;
e=*(–S.top);
return OK;
}//Pop
Status two()
{ SElemType n;char e;
SqStack S;
InitStack(S); //建空栈
printf(“请输入一个十进制正整数:\n”); //该函数未检查是否为正数和整数
scanf(“%d”,n);
printf(“的2进制是:”);
while(n)
{
Push(S,n%2); // N/2余数进栈
n=n/2; //整除运算
}
while(S.top != S.base){
Pop(S,e);
printf(“%d”,e);
}
printf(“\n”);
DestroyStack(S);
}
Status eight()
{ SElemType n;char e;
SqStack S;
InitStack(S); //建空栈
printf(“请输入一个十进制正整数:\n”);
scanf(“%d”,n);
printf(“的8进制是:”);
while(n)
{
Push(S,n%8); // N/8余数进栈
n=n/8; //整除运算
}
while(S.top != S.base){
Pop(S,e);
printf(“%d”,e);
}
printf(“\n”);
DestroyStack(S);
}
Status sixteen()
{ SElemType n;char e;
SqStack S;
InitStack(S); //建空栈
printf(“请输入一个十进制正整数:\n”);
scanf(“%d”,n);
printf(“的16进制是:”);
while(n)
{ e=n%16;
If(e==0) e=’0′;
if(e==1) e=’1′;
if(e==2) e=’2′;
if(e==3) e=’3′;
if(e==4) e=’4′;
if(e==5) e=’5′;
if(e==6) e=’6′;
if(e==7) e=’7′;
if(e==8) e=’8′;
if(e==9) e=’9′;
if(e==10) e=’A’;
if(e==11) e=’B’;
if(e==12) e=’C’;
if(e==13) e=’D’;
if(e==14) e=’E’;
if(e==15) e=’F’;
Push(S,e); // N/16余数进栈
n=n/16; //整除运算
}
while(S.top != S.base){
Pop(S,e);
printf(“%s”,e);
}
printf(“\n”);
DestroyStack(S);
}
int main()
{ int flag;
int select;
printf(” 主菜单\n”);
printf(” 1.2进制\n”);
printf(” 2.8进制\n”);
printf(” 3.16进制\n”);
printf(” 4.退出\n”);
while(flag)
{ printf(“请选择: “);
scanf(“%d”,select);
switch(select)
{
case 1:
two();
break;
case 2:
eight();
break;
case 3:
sixteen();
break;
case 4:
flag=0;
break;
}
}
}
c语言用栈进制转换的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言用栈进制转换吗、c语言用栈进制转换的信息别忘了在本站进行查找喔。