《数据结构(严蔚敏版)》学习笔记(三)——栈实现数制转换

来源:互联网 发布:贵阳房价上涨知乎 编辑:程序博客网 时间:2024/05/22 15:59

《数据结构(严蔚敏版)》学习笔记(三)——栈实现数制转换

当S.top == S.base 时,栈为空;

当S.top - S.base >= S.stacksize 时,栈空间满;

转换原理:N = (N div d) * d + N mod d;


NN div 8 N mod 8

1348168 4

16821 0

212 0

20 2


如下代码为10进制转8进制程序:

<span style="font-size:14px;">/*------$栈的应用——数制转换$-------*/#include <stdio.h>#include <stdlib.h>#include <string.h>//初始定义typedef intElemType;#defineMAX_SIZE100typedef int Status;#defineOVERFLOW-1#defineOK1#defineERROR0#define TRUE1#defineFALSE0/*动态顺序栈-SqStack*/  typedef struct{ElemType*base;ElemType*top;intstacksize;}SqStack;</span>
<span style="font-size:14px;">//初始化栈Status InitStack(SqStack &S){if(!(S.base = (ElemType *)malloc(MAX_SIZE * sizeof(ElemType))))exit(OVERFLOW);S.top = S.base;S.stacksize = MAX_SIZE;return OK;}Status Pop(SqStack &S,ElemType &e){if(S.top == S.base)return ERROR;e = * --S.top;return OK;}Status Push(SqStack &S,ElemType e){if(S.top - S.base >= S.stacksize){S.base = (ElemType *)realloc(S.base,(S.stacksize + MAX_SIZE) * sizeof(ElemType));if(!S.base)exit(OVERFLOW);S.top = S.base + S.stacksize;S.stacksize += MAX_SIZE;}*S.top++ = e;return OK;}Status StackEmpty(SqStack S){if(S.base == S.top)return TRUE;elsereturn FALSE;}/*算法[非负十进制数,转化成八进制数]*/void NumeralTrans(){int N;ElemType e;SqStack S;InitStack(S);scanf("%d",&N);</span><pre name="code" class="cpp"><span style="white-space:pre"></span>while(N){Push(S,N % 8);N = N/8;}while(!StackEmpty(S)){Pop(S,e);printf("%d",e);}
}int main(){NumeralTrans();printf("\n");return 0;}


算法核心:

栈中存余数,N替换为商

出栈后即为转制后的数

<span style="white-space:pre"></span>while(N){Push(S,N % 8);N = N/8;}while(!StackEmpty(S)){Pop(S,e);printf("%d",e);}


0 0
原创粉丝点击