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.cstack_fun.h都放到该目录下,已提供框架

\workspace\stack\code\src

3)测试代码目录:(仅供调试参考,可以自行添加测试代码,测试代码本身不进行验收)

\workspace\stack\code\testcode

4API库目录,存放了所用到的API所在的库文件testLib.lib

\workspace\testLib

 

1.6.2       Torado环境下使用workspace_tc工程

1)工程目录:

双击\workspace_tc\stack\ stack.wpj程序可以直接打开工程环境(注意解压缩的父目录不要有中文字符),源代码框架已经提前加到工程中了。

2)源码目录:考生需提供的源文件stack_fun.cstack_fun.h都放到该目录下,已提供框架 \workspace_tc\stack\code\src

3)测试代码目录:(仅供调试参考)

\workspace_tc\stack\code\testcode

4API库目录,存放了所用到的API所在的库文件testLib.a

\workspace_tc\testLib

 

原创粉丝点击