天大数据结构_实验作业二_栈顺序栈队列循环队列

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++编译器的提醒,修正代码错误,然后输入数据进行调试。

采用分开不同算法的方式,输入大型数值进行运算,分析复杂度。可以明显看出递归算法的运行速度较慢,时间复杂度更高。

五、测试结果

相关文档
最新文档