⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 栈的数制转换算法.cpp

📁 进制转换是数据结构中的栈的应用的一个典型例子
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>

#define OVERFLOW -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef int SElemType;
typedef int Status;

struct STACK
//栈的结构定义//
{
  SElemType *base;
  SElemType *top;
  int stacksize;
};

typedef struct STACK SqStack;
typedef struct STACK *pSqStack;
Status InitStack(SqStack  **S);
Status StackEmpty(SqStack S);
Status Push(SqStack *S,SElemType e);
Status Pop(SqStack *S,SElemType *e);
void conversion();

Status InitStack(SqStack **S)
//初始化栈//
{
  (*S)=(SqStack *)malloc(sizeof(SqStack));
  (*S)->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
  if(!(*S)->base) 
	 return(0);
  (*S)->top=(*S)->base;
  (*S)->stacksize=STACK_INIT_SIZE;
  return (1);
}


Status StackEmpty(SqStack S)
//判断栈是否为空//
{
  if(S.top==S.base) return (1);
  else
    return (0);
}



Status Push(SqStack *S,SElemType e)
//入栈算法//
{
  *(S->top++)=e;
  return (1);
}

Status Pop(SqStack *S,SElemType *e)
//出栈算法//
{
  if(S->top==S->base) return (0);
  *e=*(--(S->top));
  return (1);
}

void conversion()
//进制转换算法//
{
 pSqStack S;
 SElemType e;

 int n,f;
 InitStack(&S);
 printf("请输入你要转换的进制数:\n");
 scanf("%d",&n);
 printf("请输入你要转换的进制:\n");
 scanf("%d",&f);
 if(n<0)
   {
     printf("\n你输入的数为负.");
     return;
   }
 if(!n) Push(S,0);

 while(n){
   Push(S,n%f);
   n=n/f;
 }

 printf("转换后的数为:        \n");
 while(!StackEmpty(*S)){
   Pop(S,&e);
   printf("%d",e);
 }
}

void main()
{
  printf("\n\n\n");
  conversion();
  getch();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -