实验二堆栈实验报告教材.docx

上传人:b****2 文档编号:1729671 上传时间:2022-10-23 格式:DOCX 页数:21 大小:83.75KB
下载 相关 举报
实验二堆栈实验报告教材.docx_第1页
第1页 / 共21页
实验二堆栈实验报告教材.docx_第2页
第2页 / 共21页
实验二堆栈实验报告教材.docx_第3页
第3页 / 共21页
实验二堆栈实验报告教材.docx_第4页
第4页 / 共21页
实验二堆栈实验报告教材.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验二堆栈实验报告教材.docx

《实验二堆栈实验报告教材.docx》由会员分享,可在线阅读,更多相关《实验二堆栈实验报告教材.docx(21页珍藏版)》请在冰豆网上搜索。

实验二堆栈实验报告教材.docx

实验二堆栈实验报告教材

计算机科学与技术系

实验报告

 

专业名称计算机科学与技术

课程名称数据结构与算法

项目名称实验二堆栈实验

班级1

学号

姓名

同组人员无

实验日期

 

实验二堆栈实验

实验题目1:

将十进制正整数转换成十六进制的算法

1.问题分析

本程序要求实现将十进制正整数转换成十六进制的算法。

完成该实验需要以下3个子任务:

首先定义一个顺序栈SeqStack的类型,再写出栈的基本算法的函数。

用dectohex()函数实现将十进制化为16进制的数入栈;

在主函数完成数据的输出和出栈。

测试数据设计如下:

24

48

99

100

101

2.概要设计

1)为了实现上述程序功能,需要:

定义一个顺序栈SeqStack的类型定义栈的基本算法调用函数dectohex把十进制转换为16进制存入s中在主函数中完成16进制的输出

 

2)本程序包含7个函数:

1.主函数main()

2.置空栈InitStack()

3.判栈空StackEmpty()

4.取栈顶函数GetTop()

5.入栈Push()

6.出栈Pop()

7.dectohex()

 

各函数关系如下:

InitStack、

StackEmpty

mainGetTop

Push

Pop

dectohex

 

3、详细设计

实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)顺序栈

#definemaxlen100

typedefstruct{

intdata[maxlen];

inttop;

}SeqStack;

(2)栈的基本算法

SeqStack*InitStack(SeqStack*s){//建立一个空栈

s->top=-1;

returns;

}

intStackEmpty(SeqStack*s){//判断栈是否为空

if(s->top>=0)return0;

elsereturn1;

}

intGetTop(SeqStack*s){//取栈顶元素

if(s->top<=maxlen-1&&s->top>=0)return(s->data[s->top]);

elseprintf("effor");

}

voidPush(SeqStack*s,intx){//入栈

if(s->toptop>=-1){

s->top++;s->data[s->top]=x;

}elseprintf("effor");

}

voidPop(SeqStack*s){//出栈

if(s->top>=0)s->top--;

elseprintf("effor");

}

(3)用dectohex()函数实现将十进制化为16进制的数入栈

voiddectohex(longnum){//将十进制转换成十六进制

InitStack(&s);

while(num){

intk=num%16;

Push(&s,k);

num=num/16;

}

 

(4)在主函数完成数据的十六进制输出和出栈。

intmain()

{

longnum;

scanf("%ld",&num);

dectohex(num);

while(!

StackEmpty(&s)){//以十六进制输出

intx=GetTop(&s);

if(x<10){

printf("%d",x);

}

else{

switch(x){

case10:

printf("A");break;

case11:

printf("B");break;

case12:

printf("C");break;

case13:

printf("D");break;

case14:

printf("E");break;

case15:

printf("F");break;

}

}

Pop(&s);

}

printf("\n");

return0;

}

 

4、调试分析

编译时在主函数定义了SeqStacks,在dectohex()里也有这个语句,十进制转十六进制时是储存在形参的栈里面,执行之后,并没有传递给实参,导致输出为空。

解决办法把s定义为全局变量,或者在dectohex()函数多声明个形参。

本程序使用的是把s定义为全局变量。

5、用户使用说明

程序名为class1.exe,在DEBUG文件夹里面。

运行环境Visualc++6.0。

6、测试结果

7、附录

#include

#definemaxlen100

typedefstruct{//顺序栈的定义

intdata[maxlen];

inttop;

}SeqStack;

SeqStacks;

SeqStack*InitStack(SeqStack*s){//建立一个空栈

s->top=-1;

returns;

}

intStackEmpty(SeqStack*s){//判断栈是否为空

if(s->top>=0)return0;

elsereturn1;

}

intGetTop(SeqStack*s){//取栈顶元素

if(s->top<=maxlen-1&&s->top>=0)return(s->data[s->top]);

elseprintf("effor");

}

voidPush(SeqStack*s,intx){//入栈

if(s->toptop>=-1){

s->top++;s->data[s->top]=x;

}elseprintf("effor");

}

voidPop(SeqStack*s){//出栈

if(s->top>=0)s->top--;

elseprintf("effor");

}

voiddectohex(longnum){//将十进制转换成十六进制

InitStack(&s);

while(num){

intk=num%16;

Push(&s,k);

num=num/16;

}

}

intmain()

{

longnum;

scanf("%ld",&num);

dectohex(num);

while(!

StackEmpty(&s)){//以十六进制输出

intx=GetTop(&s);

if(x<10){

printf("%d",x);

}

else{

switch(x){

case10:

printf("A");break;

case11:

printf("B");break;

case12:

printf("C");break;

case13:

printf("D");break;

case14:

printf("E");break;

case15:

printf("F");break;

}

}

Pop(&s);

}

printf("\n");

return0;

}

实验题目2:

用栈判断所给的字符串是否具有中心对称的关系,要求尽可能少的时间完成判断。

1.问题分析

本程序要求实现用栈判断字符串是否为回文字符串的算法。

完成该实验需要以下3个子任务:

首先定义一个顺序栈SeqStack的类型,再写出栈的基本算法的函数。

用compare()函数实现判断字符串是否具有中心对称的关系;

在主函数输出判断结果。

测试数据设计如下:

xyzyx

abcddcba

2.概要设计

3)为了实现上述程序功能,需要:

定义一个顺序栈SeqStack的类型定义栈的基本算法调用函数compare()函数判断字符串是否具有中心对称的关系在主函数中输出判断结果

 

4)本程序包含8个函数:

1.主函数main()

2.置空栈InitStack()

3.判栈空StackEmpty()

4.判栈满StackFull()

5.取栈顶函数GetTop()

6.入栈Push()

7.出栈Pop()

pare()

 

各函数关系如下:

InitStack、

StackEmpty

mainGetTop

Push

Pop

StackFull

compare

 

4、详细设计

实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)顺序栈

#definemaxlen100

typedefstruct{

intdata[maxlen];

inttop;

}SeqStack;

(2)栈的基本算法

SeqStack*InitStack(SeqStack*s){//建立一个空栈

s->top=-1;

returns;

}

intStackEmpty(SeqStack*s){//判断栈是否为空

if(s->top>=0)return0;

elsereturn1;

}

intStackFull(SeqStacks){//判断栈是否为满

if(s.top==maxlen-1)

return1;

else

return0;

}

intGetTop(SeqStack*s){//取栈顶元素

if(s->top<=maxlen-1&&s->top>=0)return(s->data[s->top]);

elseprintf("effor");

}

voidPush(SeqStack*s,intx){//入栈

if(s->toptop>=-1){

s->top++;s->data[s->top]=x;

}elseprintf("effor");

}

voidPop(SeqStack*s){//出栈

if(s->top>=0)s->top--;

elseprintf("effor");

}

(3)用compare()函数判断字符串是否有中心对称关系

intcompare(chars1[]){

SeqStacks;

inti,len;

InitStack(&s);

len=strlen(s1);

for(i=0;i

Push(&s,s1[i]);

}

for(i=(len+1)/2;i

if(s1[i]!

=GetTop(&s))

return0;

else

Pop(&s);

}

return1;

}

 

(4)在主函数完成判断结果的输出

voidmain(){

chars1[20];

printf("请输入一个回文串:

\n");

gets(s1);

printf("判断结果:

\n");

if(co

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1