201003
来源:互联网 发布:剑三正太捏脸数据导入 编辑:程序博客网 时间:2024/06/04 18:53
1 题目概述:实现栈操作功能
1.1 试题考核目的和使用说明
考核目的:本试题主要考核基本的栈操作知识和编码技能(本试题已经设计好了代码基本框架,考生只要理解该框架并进行编码实现即可)。
答卷提交:请使用试题包中的stack_fun.c和stack_fun.h提交编写调试后的源代码(所有源代码均应在这两个文件中,不能增加或者删减源文件),把这两个文件用WinRar打包成一个文件,命名格式为“考试级别数字+调测环境代号+8位工号”的格式,如:
张三的工号为00187658,考0级,使用Tornado调测环境(代号为AT,A表示是试题A卷,T表示是Tornado环境),则打包文件的名称为:0AT00187658.rar
李四的工号为00198765,考1级,使用VC调测环境(代号为AV,A表示是试题A卷,V表示是VC环境),则打包文件的名称为:1AV00198765.rar
使用说明:本次技能鉴定考试提供两份试题(A卷和B卷)供考生选择其中的一份答题,本试题是两份试题中的A卷。本试题支持通过Tornado调测环境和Visual C++调测环境进行调测,并提供了已经建好的工程,具体使用方法参见“1.6 工程介绍”。
1.2 试题简介
试题简介:栈(Stack)结构是计算机语言实现中的一种重要数据结构。栈是一种后进先出(LIFO)的结构,对于任意栈,进行数据入栈和出栈操作的一端称为栈顶(Stack Top),而另一端称为栈底(Stack Bottom)。栈的基本操作包括:创建栈(NewStack)、 判断栈是否为空(IsEmpty)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。
本题请考生完成栈结构的操作功能:
(1) 提供创建空栈的函数接口;
(2) 提供销毁栈结构的函数接口;
(3) 提供数据入栈操作的函数接口;
(4) 提供数据出栈操作的函数接口;
(5) 提供显示栈中数据的函数接口。
1.3 试题详细说明
1.3.1 设计栈的数据结构和栈操作相关的函数
要求:设计实现栈的数据结构STRU_STACK(特别提示:该结构需要考生首先设计编码,否则工程会编译失败,只要增加一个成员变量进去就可以编译通过了),并提供如下与栈操作相关的函数接口和功能
(1) 创建一个整数栈,用于存放整数数据。栈结构体类型STRU_STACK由考生自行定义。栈大小为不定长,只要有足够内存即可。
函数原型:STRU_STACK* NewStack(void)
函数功能:创建一个空栈(栈中无数据)
输入说明:无
输出说明:无
返回值:指向所创建的栈的指针,创建失败时返回空指针。
(2) 销毁一个整数栈结构,释放相关的资源
函数原型:int DestroyStack(STRU_STACK* pstrStack)
函数功能:销毁一个指定的整数栈,释放相关资源。
输入说明:pstrStack:指向指定整数栈的指针
输出说明:无
返回值:0——操作成功;
非0——操作失败(出现参数错误等)。
(3) 数据入栈操作,通过如下函数获得:
函数原型:int Push(STRU_STACK * pstrStack, int iData)
函数功能:将指定数据入栈,放到栈顶。
输入说明:pstrStack:栈指针
iData:入栈的数据
输出说明:无
返回值:0——入栈成功;
非0——入栈失败(出现参数错误或内存不足等)。
(4) 数据出栈操作,通过如下函数获得:
函数原型:int Pop(STRU_STACK* pstrStack, int *pOutData)
函数功能:从指定栈中弹出一个数据。栈是LIFO结构,弹出栈顶的数据。
输入说明:pstrStack:栈指针
输出说明:*pOutData,出栈的数据。
返回值:0——出栈成功;
非0——出栈失败(出现参数错误或者栈中无数据等错误)。
(5) 显示栈中保存的数据,通过如下函数获得。要求:数据显示时每个数据之间用逗号隔离,每行最多显示8个数据。
函数原型:int ShowStack(STRU_STACK *pstrStack, int iOrder)
函数功能:根据要求按顺序显示栈中保存的数据。
输入说明:pstrStack:栈指针
iOrder:0——表示从栈底向栈顶的方向逐个显示数据,
1——表示从栈顶到栈底的方向逐个显示数据。
输出说明:无
返回值:0——操作成功;
非0——操作失败(出现参数错误等)。
打印格式要求如下:(示例)
(1)栈为空时:
The Stack is empty!
(2)栈非空且从栈底向栈顶方向逐个显示数据:
Stack data from bottom to top:
1, 5, 8, 21, 3, 0, -8, 390,
-11, 9, 8
(3)栈非空且从栈顶向栈底方向逐个显示数据:
Stack data from top to bottom:
8, 9, -11,390,-8, 0, 3, 21,
8, 5, 1
1.3.2 使用到的API说明
(1) 内存分配和释放必须使用试题组提供工程中的库文件(VC工程为testLib.lib,tornado工程中为testLib.a,考生直接打开工程后即可自动加入这两个库文件,无需单独链接或者下载库文件)中提供的API(目的是为了监控是否存在内存泄漏),原型为:
void *Mem_alloc
(
unsigned int nBytes /* number of bytes to allocate */
)
void Mem_free
(
void * ptr /* pointer to block of memory to free */
)
(2) 打印函数直接使用标准库函数,原型为:
int printf
(
const char * fmt, /* format string to write */
... /* optional arguments to format string */
)
1.3.3 编程要求
编程框架包括一个stack_fun.h文件和一个stack_fun.c文件。
(1) stack_fun.h用于定义对外提供的数据结构和接口定义
(2) stack_fun.c用于实现具体的函数功能
1.4 代码的验收标准
(1) 正确实现栈操作的基本功能,按照要求显示栈中的内容。测试用例可参考测试用例1(参见1.5 代码的参考测试用例)。
(2) 代码实现可靠,没有内存泄漏。
(3) 代码设计具有鲁棒性,考虑各种异常情况。例如在空栈情况下,弹栈不会造成踩内存等情况。
1.5 代码的参考测试用例(仅作调试参考)
测试用例1:测试栈的基本正常功能
#include "stdio.h"
#include "stack_fun.h"
typedef enum
{
STACK_OK = 0,
STACK_CREAT_FAIL = -1, /* 栈创建失败 */
STACK_PUSH_FAIL = -2, /* 压栈失败 */
STACK_POP_FAIL = -3 /* 弹栈失败 */
} STACK_RET_ENUM;
int TestCase01()
{
int i,j;
STRU_STACK *pStack = NewStack();
if(NULL == pStack)
{
return STACK_CREAT_FAIL;
}
i = 5;
for(i=0;i<5;i++)
{
if(Push(pStack, i))
{
return STACK_PUSH_FAIL;
}
}
ShowStack(pStack, 0);
for(i=0;i<3;i++)
{
if(Pop(pStack, &j))
{
return STACK_POP_FAIL;
}
printf("pop %d\n", j);
}
ShowStack(pStack, 1);
return STACK_OK;
}
该用例执行后应返回0,并且有如下打印:
Stack data from bottom to top:
0, 1, 2, 3, 4
Pop 4
Pop 3
Pop 2
Stack data from top to bottom:
1, 0
1.6 工程介绍
1.6.1 VC环境下使用workspace工程
(1)工程目录:
双击\workspace\stack\ stack.dsw程序可以直接打开工程环境,源代码框架已经提前加到工程中了。
(2)源码目录:需提供的源文件stack_fun.c和stack_fun.h都放到该目录下,已提供框架
\workspace\stack\code\src
(3)测试代码目录:(仅供调试参考,可以自行添加测试代码,测试代码本身不进行验收)
\workspace\stack\code\testcode
(4)API库目录,存放了所用到的API所在的库文件testLib.lib:
\workspace\testLib
1.6.2 Torado环境下使用workspace_tc工程
(1)工程目录:
双击\workspace_tc\stack\ stack.wpj程序可以直接打开工程环境(注意解压缩的父目录不要有中文字符),源代码框架已经提前加到工程中了。
(2)源码目录:考生需提供的源文件stack_fun.c和stack_fun.h都放到该目录下,已提供框架 \workspace_tc\stack\code\src
(3)测试代码目录:(仅供调试参考)
\workspace_tc\stack\code\testcode
(4)API库目录,存放了所用到的API所在的库文件testLib.a:
\workspace_tc\testLib