顺序栈实现数制转换

#include <stdio.h>

#include <stdlib.h>

#define StackSize 100 /*假定预分配的栈空间最多为100个元素*/

typedef int DataType; /*应将顺序栈的DataType定义改为整型*/

typedef struct

{ DataType data[StackSize];

 int top;

}SeqStack;

void main()

{

 void InitStack(SeqStack *S);

 int StackEmpty(SeqStack *S);

 int StackFull(SeqStack *S);

 void Push(SeqStack *S,DataType x);

 DataType Pop(SeqStack *S);

 DataType StackTop(SeqStack *S);

 void MultiBaseOutput(int N,int B);

 int N,B;

 printf("请输入欲转换的十进制数:");

 scanf("%d",&N);

 printf("请输入欲转换成的进制:");

 scanf("%d",&B);

 MultiBaseOutput(N,B);

}

void InitStack(SeqStack *S)

{ /*将顺序栈置空*/

 S->top=-1;

}

int StackEmpty(SeqStack *S)

{

 return S->top==-1;

}

int StackFull(SeqStack *S)

{

 return S->top==StackSize-1;

}

void Push(SeqStack *S,DataType x)

{ if (StackFull(S))

 { printf("Stack overflow");

  exit(0);  /*上溢,退出运行*/

 }

 S->data[++S->top]=x;  /*栈顶指针加1后将x进栈*/

}

DataType Pop(SeqStack *S)

{ if (StackEmpty(S))

 { printf("Stack underflow");

  exit(0);     /*下溢,退出运行*/

 }

 return S->data[S->top--]; /*栈顶元素返回后将栈顶指针减1*/

}

DataType StackTop(SeqStack *S)

{ if (StackEmpty(S))

 { printf("Stack is empty");

  exit(0);

 }

 return S->data[S->top];

}

void MultiBaseOutput(int N,int B)

{ /*假设N是非负的十进制整数,输出等值的B进制数*/

 int i;

 SeqStack S;

 InitStack(&S);

 printf("十进制数%d的%d进制数是",N,B);

 while(N)

 { /*从右向左产生B进制数的各位数字,并将其进栈*/

  Push(&S,N%B);

  N=N/B;

 }

 while(!StackEmpty(&S))

 { /*栈非空时退栈输出*/

  i=Pop(&S);

  printf("%d",i);

 }

 printf("\n");

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值