C_栈的应用----数制转换
来源:互联网 发布:js防水怎么样 编辑:程序博客网 时间:2024/06/14 04:52
编制一个满足下列要求的程序:
对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。由于上述计算过程是低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。
十进制的150转换为八进制
用150对8求余得到6压入栈中,此时栈中只有一个元素栈底6
用(150/8)=18对8求余得到2压入栈中,此时栈中有两个元素 6 2
用(18/8)=2对8求余得到2压入栈中,此时栈中有三个元素6 2 2
2/8=0此时退出元素入栈的操作
此时顺序出栈得到2 2 6
所以十进制150转化为八进制为226
函数操作实现如下:
void conversion(int num){//对于输入的任意一个非负十进制整数,打印输出与其等值的八位数ElemType e;SqStack S;InitStack(S);//构建一个空栈 while(num)//num为0退出进栈操作 {Push(S,num%8);//将对8求余得到的数压入栈中 num=num/8;}while(!StackEmpty(S))//当为空栈的时候退出出栈操作 {Pop(S,e);printf("%d",e);}printf("\n");}
嗯下面就是在VC中的测试:
#include<stdio.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2#define STACK_INIT_SIZE 100//存储空间初始化分配量#define STACKINCREMENT 10//存储空间分配增量 typedef int ElemType;typedef int Status;typedef struct{ElemType*base;//栈底指针 ElemType*top;//栈顶指针 int stacksize;}SqStack;Status InitStack(SqStack &s){//构建一个空栈S。 s.base=(ElemType*)malloc(STACK_INIT_SIZE*(sizeof(ElemType)));if(!s.base){printf("建栈失败!\n");return ERROR; }else{s.top=s.base;//栈底和栈顶指针指向同一块内存 s.stacksize=STACK_INIT_SIZE;return OK; }}Status DestroyStack(SqStack &s){//销毁栈s,s不再存在。 s.top=s.base;free(s.base);s.base=NULL;//释放后一定要指向NULL,避免出现野指针 s.top=NULL;return OK;}Status ClearStack(SqStack &s){//将S清为空栈。 s.top=s.base;//栈顶和栈底指针指向同一块内存此时栈中就没有其它元素 s.stacksize=0;return OK;}Status StackEmpty(SqStack s){//若栈S为空栈,则返回TRUE,否则FALS。 if(s.top==s.base)return TRUE;elsereturn FALSE;}Status StackLength(SqStack s){//返回S的元素个数,即栈的长度.。 return s.top-s.base;}Status GetTop(SqStack s,ElemType &e){//用e返回S的栈顶元素 。 if(StackEmpty(s)){printf("这是一个空栈!");return ERROR;}else{s.top--;e=*s.top;return OK;}}Status Push(SqStack &s,ElemType e){//插入元素e为新的栈顶元素。if(StackLength(s)==STACK_INIT_SIZE){ElemType *temp=(ElemType*)realloc(s.base,(STACK_INIT_SIZE+STACKINCREMENT)*(sizeof(ElemType))); if(!temp)return ERROR;s.base=temp;s.top=s.base+STACK_INIT_SIZE;s.stacksize=STACK_INIT_SIZE+STACKINCREMENT;*(s.top++)=e;return OK;}else{*s.top=e;s.top++;return OK; }}Status Pop(SqStack &s,ElemType &e){//删除S的栈顶元素,并用e返回其值if(StackEmpty(s)){printf("这是一个空栈\n");return ERROR; }else{e=*(--s.top);return OK;}}void PrintStack(SqStack s){//显示栈中的元素 if(StackEmpty(s)){printf("栈中没有数据元素!\n");}while(s.top!=s.base){printf("%d ",*(--s.top));}printf("\n");}void conversion(int num){//对于输入的任意一个非负十进制整数,打印输出与其等值的八位数ElemType e;SqStack S;InitStack(S);//构建一个空栈 while(num)//num为0退出进栈操作 {Push(S,num%8);//将对8求余得到的数压入栈中 num=num/8;}while(!StackEmpty(S))//当为空栈的时候退出出栈操作 {Pop(S,e);printf("%d",e);}printf("\n");}int main(){int num;printf("当输入小于等于0的数退出操作!\n");printf("转化前的十进制数:");while(scanf("%d",&num)&&num>0){printf("转化后的八进制数:");conversion(num);printf("转化前的十进制数:");}printf("成功退出操作!\n");return 0;}
阅读全文
1 0
- C_栈的应用----数制转换
- 栈的应用:数制转换
- 栈的应用----数制转换
- 栈的应用数制转换
- 数制转换(栈的应用)
- VC栈的应用--数制转换
- 栈的应用之数制转换
- 栈的应用——数制转换
- 栈的应用之数制转换
- 栈的应用—数制转换
- 栈的基本应用-数制转换-数据结构
- 栈的应用举例----数制转换
- 栈的应用之数制转换
- 栈在数制转换上的应用
- 栈的应用之数制转换
- 栈的应用——数制转换
- 栈的应用——数制转换
- 栈应用之一数制转换
- 应届生求职指南(一)- 序言
- iOS WKWebView 与 js 交互
- Inkscape将位图转换为矢量图
- 新开博客
- 初识----Spring Boot的微框架
- C_栈的应用----数制转换
- 异步fifo设计(四)
- 文章标题
- SSIS控件无法设置断点
- 关于shell-----2
- SPOJ DQUERY 求区间内不同数的个数 (主席树)
- bash shell命令
- HDU 1005 Number Sequence(矩阵快速幂)
- 欢迎使用CSDN-markdown编辑器