天大数据结构_实验作业二_栈顺序栈队列循环队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验作业二:栈(顺序栈)和队列(循环队列)
1. 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。当向第0号栈插入一个新元素时,使top[0]增1得到新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。当top[0]+1 ==top[1]时或top[0] ==top[1]-1时,栈空间满,此时不能再向任一栈加入新的元素。试定义这种双栈(Double Stack)结构的类定义,并实现判栈空、判栈满、插入、删除算法。
2. 求fibonacci数列算法,并比较。(递归+非递归)(非递归方法可查阅其他资料)
编写实习报告要求:
一、需求分析
二、概要设计
1.抽象数据类型
2.算法
三、详细设计
程序代码(注释)
四、调试分析
调试过程中所做的工作,时间复杂度等
五、测试结果
输入数据和输出数据示例
六、说明(如果有)
编程语言:C语言或C++语言
实习报告提交方式:下次上机前,将实习报告(.doc)和源程序(.cpp)压缩成一个rar 文件,文件名称为学号_班级_姓名_第几次作业。例如:55_六班_张三_第二次作业.rar。实习报告作为本课程的平时成绩。
抄袭、雷同,双方均为0分。
第一题:
一、需求分析
程序要求建立一个共享栈,分配一个存储空间,两个栈分别位于两头。并实现对两个栈的插入,删除,和判断栈满和栈空。栈的位置不同,所以要求对不同栈的插入和删除采用不同的算法。
二、概要设计
1.抽象数据类型
typedef struct {
int *base;
int *top;
int stacksize;
}stack;
2.算法
1.建立栈。
int instack(stack &s,stack &w,int length){
=(int *)malloc(length*sizeof(length));
=+length;
if(!||! return 0;
else{
=;
=;
=length;
=length;
}
return 1;
}
2.判断栈空。
int isempty(stack s,stack w){
if==&&== return 1;
if== return 2;
if== return 3;
else return 0;
}
3.判断栈满。
int isfull(stack s,stack w){
if(+1)== return 1;
else return 0;
}
4.插入元素到左边栈。
void push1(stack &s,stack &w, int x){
if(+1)== cout<<"栈满,无法进栈!"< else{ *=x; ++; } } 5.插入元素到右边栈。 void push2(stack &s,stack &w, int x){ if(+1)== cout<<"栈满,无法进栈!"< else{ *=x; ; } } 6.左栈元素出栈。 void pop1(stack &s,int &x){ if== cout<<"栈空,无法出栈!"< else{ ; x=*; } } 7.右栈元素出栈。 void pop2(stack &w,int &x){ if== cout<<"栈空,无法出栈!"< else{ ++; x=*; } } 二、详细设计 采用以上算法后,运用下面主程序: int main(){ int x,l,pase,choice,pr; 象数据类型 无 2.算法 ①.递归算法 int fib1(int x){ f(x== 1||x==2) return 1; lse return (fib1(x-1)+fib1(x-2)); } ②.非递归算法 int fib2(int x){ int a=1,b=1,num=0,n; if(x== 1||x==2) return 1; for (n=0;n { num=a+b; a=b; b=num; } return num; 三、详细设计 采用以上算法后,运用下面主程序: int main(){ int sum1,sum2,x; //定义变量 cout<<"请输入想要计算的数:"< cin>>x; //输入需要计算到的数值的最后一位 sum1=fib1(x); //调用递归算法 sum2=fib2(x); //调用非递归算法 cout<<"采用递归算法计算得其fibonacci数列值为:"< cout<<"采用非递归算法计算得其fibonacci数列值为:"< system("pause"); return 0; } 四、调试分析 根据visual C++编译器的提醒,修正代码错误,然后输入数据进行调试。 采用分开不同算法的方式,输入大型数值进行运算,分析复杂度。可以明显看出递归算法的运行速度较慢,时间复杂度更高。 五、测试结果