数据结构与算法的实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构与算法第二次实验报告

电子105班

赵萌

2010021526

实验二:栈和队列的定义及基本操作

一、实验目的:

. 熟练掌握栈和队列的特点

. 掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用

. 掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用, 掌握环形队列的入队和出队等基本操作

. 加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力

二、实验内容:

定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素;

实现十进制数与八进制数的转换;

定义链式队列,完成队列的基本操作:入队和出队;

1.问题描述:

(1)利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作:

. 初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底;

. 完成一个元素的入栈操作,修改栈顶指针;

. 完成一个元素的出栈操作,修改栈顶指针;

. 读取栈顶指针所指向的元素的值;

. 将十进制数N 和其它d 进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除 d 取余法。例如:(1348)10=(2504)8

N N div 8 N mod 8

1348 168 4

168 21 0

21 2 5

2 0 2

从中我们可以看出,最先产生的余数 4 是转换结果的最低位,这正好符合栈的特性即后进先出的特性。

所以可以用顺序栈来模拟这个过程。以此来实现十进制数与八进制数的转换; . 编写主程序,实现对各不同的算法调用。

(2)利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作:

. 初始化一个空队列,形成一个带表头结点的空队;

. 完成一个元素的入队操作,修改队尾指针;

. 完成一个元素的出队操作,修改队头指针;

. 修改主程序,实现对各不同的算法调用。

其他算法的描述省略,参见实现要求说明。

2.实现要求:

对顺序栈的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。

.“初始化栈算法”操作结果:构造一个空栈S;

.“销毁栈算法”操作结果:销毁栈S,S 不再存在;

.“置空栈算法”操作结果:把S 置为空栈;

.“判是否空栈算法”操作结果:若栈S 为空栈,则返回TRUE,否则返回FALSE; .“求栈的长度算法”操作结果:返回S 的元素个数,即栈的长度;

.“取栈顶元素算法”操作结果:若栈不空,则用e 返回S 的栈顶元素,并返回OK;否则返回ERROR;

.“入栈算法”操作结果:插入元素e 为新的栈顶元素

.“出栈算法”操作结果:若栈不空,则删除S 的栈顶元素,用e 返回其值,并返回OK;否则返回ERROR;

.“实现十进制数与八进制数的转换算法”操作结果:输入任意一个非负的十进制数,输出对应的八进制数;

对链式队列的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。

.“初始化空队算法”操作结果:构造一个空队列Q;

.“销毁队列算法”操作结果:销毁队列Q(无论空否均可);

.“空队列算法”操作结果:将Q 清为空队列;

.“判队列是否为空算法”操作结果:若Q 为空队列,则返回TRUE,否则返回FALSE;

.“求队列的长度算法”操作结果:求队列的长度,返回队列中结点的个数;

.“取队头元素算法”操作结果:若队列不空,则用e 返回Q 的队头元素,并返回OK,否则返回ERROR;

. “入队算法”操作结果:插入元素e 为Q 的新的队尾元素;

.“出队算法”操作结果:若队列不空,删除Q 的队头元素,用e 返回其值,并返回OK,否则返回ERROR;

三、参考程序

(一)顺序栈

1.文件SqStackDef.h 中实现了栈的顺序存储表示

#define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/

#define STACKINCREMENT 2 /* 存储空间分配增量*/

typedef struct SqStack

{

SElemType *base; /* 在栈构造之前和销毁之后,base 的值为NULL */

SElemType *top; /* 栈顶指针*/

int stacksize; /* 当前已分配的存储空间,以元素为单位*/

}SqStack; /* 顺序栈*/

2.文件SqStackAlgo.h 中实现顺序栈的基本操作(存储结构由SqStackDef.h 定义)

Status InitStack(SqStack &S)

{ /* 构造一个空栈S */

S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base)

exit(OVERFLOW); /* 存储分配失败*/

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

Status DestroyStack(SqStack &S)

{ /* 销毁栈S,S 不再存在*/

free(S.base);

S.base=NULL;

S.top=NULL;

S.stacksize=0;

return OK;

}

Status ClearStack(SqStack &S)

{ /* 把S 置为空栈*/

S.top=S.base;

return OK;

}

Status StackEmpty(SqStack S)

{ /* 若栈S 为空栈,则返回TRUE,否则返回FALSE */

if(S.top==S.base)

return TRUE;

else

return FALSE;

}

相关文档
最新文档