利用栈实现精制转换c++
#include <QCoreApplication>
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间增量
/*-----------------------------------------------*/
typedef struct//顺序栈的表示
{int *top;int *base;//在栈构造之前和销毁之后,base的值为NULLint stacksize;
}SqStack;
/*-----------------------------------------------*/
int InitStack(SqStack &S)//构造一个空栈
{S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(0);//存储空间分配失败S.top = S.base;S.stacksize=STACK_INIT_SIZE;return 0;
}
/*-----------------------------------------------*/
int GetTop(SqStack &S,int e)
{ //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if (S.top==S.base)return 1 ;e=*(S.top-1);return 0;
}
/*-----------------------------------------------*/
int Push ( SqStack &S , int e )
{ //插入元素e为新的栈顶元素if( S.top - S.base >= S.stacksize ) //栈满,追加存储空间{S.base = ( int * ) realloc ( S.base , (S.stacksize + STACKINCREMENT ) * sizeof ( int ) ) ;if (!S.base) return 1 ; //存储分配失败S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e ;return 0 ;
}
/*-----------------------------------------------*/
int Pop(SqStack &S ,int e)
{ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1if ( S.top == S.base ) return 1 ;e = *--S.top;//先将栈顶指针减1,再移动栈顶元素return 0;
}
/*-----------------------------------------------*/
int StackEmpty (SqStack &S)
{ //若栈空,则返回1,否则返回0if (S.top == S.base)return 1 ;return 0 ;
}
/*-----------------------------------------------*/
int ClearStack(SqStack &S)//把S置为空栈
{S.base=S.top;return 0;
}
/*-----------------------------------------------*/
int DestroyStack(SqStack &S)
{ //销毁栈S,栈S不再存在free(S.base);S.base=S.top=NULL; //防止程序后面不小心使用了它return 0;
}
/*-----------------------------------------------*/
void conversion(int n)
{int e;SqStack S;InitStack(S);while(n){Push(S,n%8);n=n/8;}while(!StackEmpty(S)){Pop(S,e);printf("%d",e);}printf("\n");DestroyStack(S);
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int n;printf("请输入十进制数\n");scanf("%d",&n);conversion(n);return a.exec();
}
注意:C++函数的形参为引用,如果C语言改成指针。函数传值特性。
http://www.oschina.net/question/1998568_175149
利用栈实现精制转换c++相关推荐
- 数据结构:利用栈实现数制转换
数制转换 从键盘输入一个十进制数n,并输入要转换的进制数m,利用栈将n转换成m进制,并输出转换后的结果. 首先设计一个含有多个菜单项的主菜单程序,然后再为这些菜单项配上相应的功能. 主菜单设计要求: ...
- 利用栈进行数制转换和括号匹配(C语言)
数制转换:将十进制数转换为任意进制数.由数制转换的计算公式 N = (N / d) × d + N % d (其中N为想转换的十进制数,d为想转换的进制) 我们可以知道其转换后的结果是逆序输出,故可以 ...
- 简单的利用栈 将二进制转换成十六进制
将刚刚的二进制转换成八进制的程序改改就行了,如果有能读懂刚刚程序的人,这个so easy 就是换几个数,我就不多解释了 #include <stdio.h> #include <st ...
- 算法设计-利用栈把十进制转换成二进制
十进制转换成二进制 void conversion(){ InitStack(S); scanf("%d",n); while(N){ Push(S,n%2) n=n/2; } w ...
- C语言中用栈实现进制转换,利用栈实现进制转换问题
进制转换问题 建立顺序栈或链栈,编写程序实现十进制数到二进制数的转换. 输入 输入只有一行,就是十进制整数. 输出 转换后的二进制数. 样例输入 10 样例输出 1010 十进制怎么转为二进制?十进制 ...
- 数据结构学习笔记:利用栈实现进制转换
数据结构学习笔记:利用栈实现进制转换 一.除基倒取余法示意图 二.编写十进制转换成二进制Python程序 1.源代码 2.运行结果 其实Python提供了一
- 数制转换2(利用栈)
/* 题目:数制转换(通过栈这个数据结构来求解) 内容:输入M进制的数x,输出N进制的数. 作答者:小白杨 收获:1.栈这种数据结构,只允许在栈顶进行出栈入栈操作. 2.先构造出栈的基本结构,然后初始 ...
- 利用栈实现十进制对二进制,八进制、十六进制的任意转换(N进制)
1.程序代码如下(利用栈的动态分配实现): #include<stdio.h> #include<stdlib.h>#define ERROR 0 #define OK 1 # ...
- 利用栈和递归实现进制转换——数据结构实验报告
一.实验名称:栈的应用--进制转换 二.实验目的 熟练掌握栈的两种存储方式的具体实现过程,并分别使用递归和非递归两种方式,实现进制转换. 三.实验要求 顺序栈和链栈两种存储方式任选一种,实现从十进制到 ...
最新文章
- linux支持中文文件名,CentOS安装中文支持(linux中文文件名乱码)
- 目标跟踪从0到1:算法与实践
- Badboy自动化测试工具11 导出脚本用于Jmeter并发测试
- 小程序返回上一页并传参
- MySQL中AES_ENCRYPT('密码','钥匙')函数 可以对字段值做加密处理
- 2. SpringBoot +Mybaits
- mysqldump 备份命令使用中的一些经验总结
- [状压dp][剪枝搜索] 洛谷 P2831 愤怒的小鸟
- C/C++笔记(01):容易出错的几个库函数
- Android 开机动画的制作
- 哈希碰撞,改变世界的原力
- PSSP Based on Data Partition and Semi-Random Subspace Method 论文笔记
- Anaconda自带python,在cmd中输入python提示不是内部命令或外部命令
- mysql outer join报错_千与千寻-MySQL联结join
- 一、软件测试学习方向
- 8 种方案机智应对后端一次性返回 10万 条数据
- SpringSecurity+Mybatis实现用户自助注册登录(含角色),打造简单安全的注册登录页面。
- 哲理短文-人生什么最重要
- 正则表达式(BREs,EREs,PREs)差异比较
- C13-COBOL 文件处理动词