用两个栈实现二进制到八进制的转换C语言
来源:互联网 发布:唯品会与淘宝的区别 编辑:程序博客网 时间:2024/05/01 23:26
最近在从头开始研究数据结构与算法,将最近自己写的实例与大家分享,也希望大家多多提意见。
直接上代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 50
#define STACK_INCREMENT 20
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}sqStack;
void InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if( !s->base )
{
printf("STACK INIT FAILED!\n");
exit(0);
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
void Push(sqStack *s,ElemType e)
{
if(s->top - s->base >= s->stacksize)
{
s->base = (ElemType *)realloc(s->base, (STACK_INIT_SIZE + STACK_INCREMENT) * sizeof(ElemType)); //超出重新分配栈的大小
if( !s->base )
{
exit(0);
}
}
*s->top = e;
s->top++;
}
void Pop(sqStack *s,ElemType *e)
{
if(s->top == s->base)
{
printf("STACK IS EMPTY ,NO ELEMENT CAN BE POPPED!\n");
return;
}
*e = *--(s->top);
}
void ClearStack(sqStack *s)
{
if(s->top != s->base)
{
s->top = s->base;
}
}
int GetStackSize(sqStack *s)
{
return (s->top - s->base);
}
int main()
{
sqStack bin;
sqStack oct;
ElemType e,c_input;
int sum = 0;
int i = 0,j,stack_size_bin,stack_size_oct;
InitStack(&bin);
InitStack(&oct);
printf("please input a binary: end with '#' \n");
scanf("%c",&c_input);
while(c_input != '#')
{
Push(&bin,c_input);
scanf("%c",&c_input);
}
getchar();
stack_size_bin = GetStackSize(&bin);
while(i < stack_size_bin)
{
for(j = 0;j < 3;j++)
{
Pop(&bin, &e);
sum += (e - 48) * pow(2, j);
i++;
if(i >= stack_size_bin)
{
break;
}
}
Push(&oct, (char)sum);
sum = 0;
}
stack_size_oct = GetStackSize(&oct);
for(i = 0; i < stack_size_oct; i++)
{
Pop(&oct, &e);
printf("%c ",e + 48); //要注意ASCII码转换
}
return 0;
}
- 用两个栈实现二进制到八进制的转换C语言
- C语言栈的实现及利用栈实现二进制到八进制的转换
- C语言:十进制到八进制转换(用栈实现)
- 二进制到八进制的转换
- 十进制转换为二进制 八进制 ——用栈实现
- C语言中的二进制、八进制、十进制、十六进制他们之间的转换方式什么怎样的?
- C语言——十进制转为二进制、八进制、十六进制的函数转换
- c语言二进制,八进制,十进制,十六进制之间最简单的转换方法
- c语言二进制、八进制、十六进制
- 关于使用查表法实现十进制到二进制,八进制,十六进制的转换
- 线性表_使用栈实现二进制转换到八进制/十进制/十六进制
- 进制转换器(用顺序栈实现)(可实现简单的二进制或八进制或十进制的转换)
- 如何用C语言实现十进制到二进制的转换并计算二进制中1的个数
- 快速实现二进制/八进制/十六进制/十进制数之间的转换
- C++实现二进制、八进制、十进制、十六进制的相互转换
- 二进制,八进制,十进制,十六进制互相转化的C语言源代码
- 二进制,八进制,十进制,十六进制互相转化的C语言源代码
- 二进制,八进制,十进制,十六进制互相转化的C语言源代码
- Centos 安装PHP Nginx
- datatables 前端表格插件 初始化表格插件
- 设计模式之工厂方法模式
- liux grep和sed命令的使用
- python 集合
- 用两个栈实现二进制到八进制的转换C语言
- js和jquery使用jsonp解决跨域
- liux 重定向
- 父类指针的步长和子类指针的步长不一样
- Appium自动化测试(一)环境安装+实例登录
- Android 编程下监视应用程序的启动
- mysql定时任务
- 最近一周的日期选择设置
- python自定义函数实现最大值的输出