C语言实现数制转换
来源:互联网 发布:xin域名是什么意思 编辑:程序博客网 时间:2024/06/05 04:11
昨天实现了栈的初始化和压一个数据入栈这两个函数,今天添加一个判断栈是否为空以及出栈这两个函数,并且实现一个简单的数制转换的功能。
首先简单介绍一下数制转换功能,对于任意一个十进制数N,将其转换成d进制数,这里偷懒直接选用书上例子,将十进制数转换成八进制数,过程如下:
NN/8N%8134816841682102125202最后将十进制1348转换成八进制2504,需要将结果反向取出,所以用一个栈来存储取余的结果,再将其取出,就可以实现数制转换的功能。编译环境VC++6.0,完整代码如下:
#include <stdio.h>#include <stdlib.h>#define SElemType int#define STACK_INIT_SIZE 100#define STACK_INCRECEMENT 10#define STATUS int#define ERROR 0#define OK 1#define null 0#define TRUE 1#define FALSE 0typedef struct{SElemType *top;SElemType *base;int stacksize;}Stack;STATUS Stack_Init(Stack *s){s->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if(s->base == null)return ERROR;s->top = s->base;s->stacksize = STACK_INIT_SIZE;return OK;}//若栈为空,返回TRUE,否则为FALSESTATUS StackEmpty(Stack *s){if(s->top == s->base)return TRUE;else return FALSE;return OK;}STATUS Stack_Pop(Stack *s,SElemType *e){if(s->top == s->base)return ERROR;*e = *--s->top;//栈顶指针一定要先自减,因为它始终在push入栈的最后一个数据之上return OK;}STATUS Stack_Push(Stack *s,SElemType e){if(s->top - s->base >=STACK_INIT_SIZE){s->base = (SElemType *)realloc(s->base,(s->stacksize+STACK_INCRECEMENT)*sizeof(SElemType));if(s->base == null)return ERROR;s->top = s->base + s->stacksize;s->stacksize += STACK_INCRECEMENT;}*s->top++ = e;return OK;}int main(){SElemType e;int n,d;Stack s;if(Stack_Init(&s)){printf("输入要转换的数:\n");scanf("%d",&n);printf("输入转换进制:\n");scanf("%d",&d);}else printf("stack initial error!\n");while(n){Stack_Push(&s,n%d);n /=d;}while(!StackEmpty(&s)){Stack_Pop(&s,&e);printf("%d",e);}printf("\n");return 0;}
编写代码的时候要注意的是,对于入栈函数和出栈函数,分别采用了SElemType的变量e和指向SElemType类型变量的指针变量*e,在push函数里面,由于是第一个压入栈的数据元素,所以要对地址为*s->base的空间内存入e,所以采用了变量e;而在pop函数里面,--s->top是最后一个数据的起始地址,将栈顶指针指向此处,说明最后一个数据元素已经删除,而为了改变实参的值,首先考虑用指针传递的方式,因此函数参数使用了*e,而调用时,将变量e的地址传递给指针型形参e,此时的形参e指向了实参e,这样对形参进行赋值操作才能改变实参的值。
阅读全文
0 0
- C语言实现数制转换
- C语言实现数制转换
- C语言与Java实现:数制转换
- 数制转换(c语言)
- C实现数制之间的相互转换
- 数据结构(C语言)读书笔记5:栈的应用之数制转换及C语言代码实现
- 数制转换 递归实现
- 用栈来实现数制转换
- 递归实现数制转换
- C语言的数制
- C语言趣味编程100例——数制转换
- 百炼-2972-确定进制-C语言-数制转换
- 百炼-2973-Skew数-C语言-数制转换
- 数据结构---C语言数据结构3.2.1数制转换
- 任意两数制之间的转换(C++语言实现)
- 数制转换(C语言版)
- 实现数制转换的算法
- 数制转换各种实现 数据结构
- 单词长度
- JVM入门:垃圾回收
- C++实验6
- python读取CT医学图像
- python-十分钟入门
- C语言实现数制转换
- NPM简单设置
- 【Effection C++】读书笔记 条款07~条款08
- 第一天笔记 微营销实战技巧之微信、微博、微电商
- Java计算FIFO的缓存未命中数
- Qt5使用QPdfWriter方式写pdf文档
- python2.7 在windows 7 64bit上 桌面右下角弹出气泡
- 技术就是一个积累的过程
- 利用hibernate实现多条件组合查询的两种方式(2017年5月18日22:45:09)