数据结构 队列_队列的接口定义

队列的一个显著特征是它按照先进先出(FIFO)的方式存储和检索元素。这意味着先存入队列的元素将首先被删除 。我们可以形象的把队列看作是在车站排队买票的一队人。当新人一个一个排到队尾时,队伍也在不停变化。当队伍最前面一个人买完票后将首先离开,接着是下一个,再下一个...在计算机中,将一个元素加入队尾,称为“入队”操作;将一个元素从队首删除,称为“出队”操作(见图1)。我们可以通过检查队列头元素(而不是删除它)来获取元素的某些信息。

 

队列的接口定义

queue_init
void queue_init(Queue *queue,void(*destroy)(void *data));
返回值:无

描述:初始化由queue指定的队列。

在队列进行其他操作之前必须调用初始化函数。参数destroy是一个函数指针,通过调用queue_destroy来释放动态分配的内存空间。它的工作原理与stack_destroy相似。如果队列中的数据不需要释放,那么destroy应该指向NULL。

复杂度:O(1)

 

queue_destroy
void queue_destroy(Queue *queue);
返回值:无

描述:销毁由queue指定的队列。

在调用queue_destroy之后,队列不允许进行其他操作。除非再次调用queue_init。queue_destroy会删除队列中的所有元素,同时释放queue_init中参数destroy不为NULL时的成员所占有的内存空间。

复杂度:O(n),n为队列中元素的个数。

 

queue_enqueue
int queue_enqueue(Queue *queue,const void *data);
返回值:如果元素入队成功则返回零,否则返回-1。

描述:向queue指定的队列末尾中插入一个元素。新元素包含一个指向data的指针,因此只要元素仍然存在于队列中,data引用的内存就一直有效。与data相关的存储空间由函数的调用者来管理。

复杂度:O(1)

 

queue_dequeue
int queue_dequeue(Queue *queue,const void **data);
返回值:如果元素出队成功则返回0,否则返回-1。

描述:从queue指定的队列头部删除一个元素。返回时data指向已删除元素中存储的数据。与data相关的存储空间将由函数调用者来管理。

复杂度:O(1)

 

queue_peek
void* queue_peek(const Queue *queue);
返回值:队列头部元素中存储的数据;如果队列为空则返回NULL。

描述:获取由queue指定的队列头部元素中存储数据的宏。

复杂度:O(1)

 

queue_size
int queue_size(const Queue *queue);
返回值:队列中元素的个数。

描述:获取由queue指定的队列元素个数的宏。

复杂度:O(1)

 

posted @ 2017-11-21 06:28  DreamGo  阅读(852)  评论(0编辑  收藏  举报