实验二堆栈实验报告教材

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)本程序包含7个函数:
1.主函数main()
2.置空栈InitStack()
3.判栈空StackEmpty()
4.取栈顶函数GetTop()
5.入栈Push()
6.出栈Pop()
7.dectohex()
各函数关系如下:
InitStack、
StackEmpty
mainGetTop
Push
Pwenku.baidu.comp
dectohex
计算机科学与技术系
实 验 报 告
专业名称计算机科学与技术
课程名称数据结构与算法
项目名称实验二堆栈实验
班 级1
学 号
姓 名
同组人员无
实验日期
实验二 堆栈实验
实验题目1:将十进制正整数转换成十六进制的算法
1.问题分析
本程序要求实现将十进制正整数转换成十六进制的算法。
完成该实验需要以下3个子任务:
首先定义一个顺序栈SeqStack的类型,再写出栈的基本算法的函数。
Push(&s,k);
num=num/16;
}
(4)在主函数完成数据的十六进制输出和出栈。
int main()
{
long num;
scanf("%ld",&num);
dectohex(num);
while(!StackEmpty(&s)){ //以十六进制输出
int x=GetTop(&s);
if(x<10){
else printf("effor");
}
void Push (SeqStack *s,int x){ //入栈
if(s->top<maxlen-1 &&s->top>=-1){
s->top++;s->data[s->top]=x;
}else printf("effor");
}
void Pop (SeqStack *s){ //出栈
用dectohex()函数实现将十进制化为16进制的数入栈;
在主函数完成数据的输出和出栈。
测试数据设计如下:
24
48
99
100
101
2.概要设计
1)为了实现上述程序功能,需要: 定义一个顺序栈SeqStack的类型 定义栈的基本算法 调用函数dectohex把十进制转换为16进制存入s中 在主函数中完成16进制的输出
3、详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。
(1)顺序栈
#define maxlen 100
typedef struct{
int data[maxlen];
int top;
}SeqStack;
(2)栈的基本算法
SeqStack *InitStack(SeqStack *s){ //建立一个空栈
if(s->top<maxlen-1 &&s->top>=-1){
s->top++;s->data[s->top]=x;
}else printf("effor");
}
void Pop (SeqStack *s){ //出栈
if(s->top>=0) s->top--;
else printf("effor");
printf("%d",x);
}
else{
switch (x){
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
else return 1;
}
int GetTop(SeqStack *s){ //取栈顶元素
if(s->top<=maxlen-1 &&s->top>=0 ) return (s->data[s->top]);
else printf("effor");
}
void Push (SeqStack *s,int x){ //入栈
s->top=-1;
return s;
}
int StackEmpty(SeqStack *s){ //判断栈是否为空
if(s->top>=0) return 0;
else return 1;
}
int GetTop(SeqStack *s){ //取栈顶元素
if(s->top<=maxlen-1 &&s->top>=0 ) return (s->data[s->top]);
}
void dectohex(long num){ //将十进制转换成十六进制
InitStack(&s);
while(num){
int k=num%16;
Push(&s,k);
num=num/16;
}
}
int main()
{
long num;
scanf("%ld",&num);
dectohex(num);
if(s->top>=0) s->top--;
else printf("effor");
}
(3)用dectohex()函数实现将十进制化为16进制的数入栈
void dectohex(long num){ //将十进制转换成十六进制
InitStack(&s);
while(num){
int k=num%16;
本程序使用的是把s定义为全局变量。
5、用户使用说明
程序名为class1.exe,在DEBUG文件夹里面。运行环境Visual c++ 6.0。
6、测试结果
7、附录
#include <stdio.h>
#define maxlen 100
typedef struct{ //顺序栈的定义
int data[maxlen];
while(!StackEmpty(&s)){ //以十六进制输出
int x=GetTop(&s);
case 15:printf("F");break;
}
}
Pop(&s);
}
printf("\n");
return 0;
}
4、调试分析
编译时在主函数定义了SeqStack s,在dectohex()里也有这个语句,十进制转十六进制时是储存在形参的栈里面,执行之后,并没有传递给实参,导致输出为空。
解决办法把s定义为全局变量,或者在dectohex()函数多声明个形参。
int top;
}SeqStack;
SeqStack s;
SeqStack *InitStack(SeqStack *s){ //建立一个空栈
s->top=-1;
return s;
}
int StackEmpty(SeqStack *s){ //判断栈是否为空
if(s->top>=0) return 0;
相关文档
最新文档