实验四 栈基本应用——数制转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四栈基本应用——数制转换
【实验目的】
1、掌握栈的顺序存储。
熟练掌握它们的不同的约定中基本操作的实现方法
与差异。
2、掌握栈的特点及其基本操作(栈空/栈满条件,入栈/出栈)、链栈(栈空
条件,入栈/出栈);
【实验环境】
VC++运行环境
【实验步骤及代码】
#include "stdio.h"
#include "stdlib.h"
typedef int SElemType;
#define MaxSize 100
#define STACKINCREMENT 10
//定义栈的结构体
typedef struct {
SElemType * base;
SElemType * top;
int stacksize;
}SqStack;
int InitStack(SqStack &S){
//构造一个空栈
S.base=(SElemType*)malloc(MaxSize* sizeof(SElemType));
if (!S.base) {
exit(1);
}
S.top=S.base;
S.stacksize=MaxSize;
return 1;
}
int Pop(SqStack &S,SElemType &e){
//出栈
if (S.base==S.top) {
return -1;
}
e=*(--S.top);
return 1;
}
int Push(SqStack &s,SElemType e){
//入栈
if (s.top-s.base>=s.stacksize) {
s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof( SElemType));
if (!s.base) exit(1);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return 1;
}
bool StackEmpty(SqStack &S){
if (S.top==S.base) return 1;
else return 0;
}
void main(){
SqStack S;
SElemType N,N2,d,e;
InitStack(S);
printf("请输入要转换的数N=");
scanf("%d",&N);
N2=N;
printf("请输入要转换的进制d=");
scanf("%d",&d);
while(N){
Push(S,N%d);
N=N/d;
}
printf("把%d转换成%d进制是:",N2,d);
while(!StackEmpty(S)){
Pop(S,e);
printf("%d",e);
}
printf("\n");
}
【实验结果】。