当前位置:嗨网首页>书籍在线阅读

13-定义一个接口

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

17.4.2 定义一个接口

接口定义放在 queue.h 文件中。我们使用 Ctypedef 工具创建两个类型名: ItemQueue 。相应结构的具体实现应该是 queue.h 文件的一部分,但是从概念上来看,应该在实现阶段才设计结构。现在,只是假定已经定义了这些类型,着重考虑函数的原型。

首先,考虑初始化。这涉及改变 Queue 类型,所以该函数应该以 Queue 的地址作为参数:

void InitializeQueue(Queue * pq);

接下来,确定队列是否为空或已满的函数应返回真或假值。这里,假设 C99stdbool.h 头文件可用。如果该文件不可用,可以使用 int 类型或自己定义 bool 类型。由于该函数不更改队列,所以接受 Queue 类型的参数。但是,传递 Queue 的地址更快,更节省内存,这取决于 Queue 类型的对象大小。这次我们尝试这种方法。这样做的好处是,所有的函数都以地址作为参数,而不像 List 示例那样。为了表明这些函数不更改队列,可以且应该使用 const 限定符:

bool QueueIsFull(const Queue * pq);
bool QueueIsEmpty(const Queue * pq);

指针 pq 指向 Queue 数据对象,不能通过 pq 这个代理更改数据。可以定义一个类似该函数的原型,返回队列的项数:

int QueueItemCount(const Queue * pq);

在队列末尾添加项涉及标识项和队列。这次要更改队列,所以有必要(而不是可选)使用指针。该函数的返回类型可以是 void ,或者通过返回值来表示是否成功添加项。我们采用后者:

bool EnQueue(Item item, Queue * pq);

最后,删除项有多种方法。如果把项定义为结构或一种基本类型,可以通过函数返回待删除的项。函数的参数可以是 Queue 类型或指向 Queue 的指针。因此,可能是下面这样的原型:

Item DeQueue(Queue q);

然而,下面的原型会更合适一些:

bool DeQueue(Item * pitem, Queue * pq);

从队列中待删除的项存储在 pitem 指针指向的位置,函数的返回值表明是否删除成功。

清空队列的函数所需的唯一参数是队列的地址,可以使用下面的函数原型:

void EmptyTheQueue(Queue * pq);