2025-02-27 17:59:18 +08:00

78 lines
1.7 KiB
C
Executable File

#ifndef __BK_QUEUE_H__
#define __BK_QUEUE_H__
#ifdef __cplusplus
extern "C"{
#endif
typedef struct noden
{
void* data;
struct noden* next;
}node_t,*pnode_t;
typedef struct queue
{
pnode_t front;
pnode_t rear;
int size;
}queue_t;
/****************************************************************************
* \|/front
* +----------------+
* | data | next |
* +----------------+
* /|\ rear(1) |
* \|/
* +----------------+
* | data | next |
* +----------------+
* /|\ rear(2) |
* \|/
* +------------------+
* | data | next |
* +------------------+
* /|\ rear(3)
****************************************************************************/
/* building a empty queue */
queue_t* bk_queue_create(void);
/* destroy a build queue */
void bk_queue_destroy(queue_t* pqueue);
/* clear a queue */
void bk_queue_clear(queue_t* pqueue);
/* check queue empty or not*/
int bk_queue_is_empty(queue_t* pqueue);
/* get queue size */
int bk_queue_get_size(queue_t* pqueue);
/* get the front node */
pnode_t bk_queue_get_front(queue_t* pqueue, void **pitem);
/* get the rear node */
pnode_t bk_queue_get_rear(queue_t* pqueue, void* *pitem);
/* insert a new node to queue */
pnode_t bk_queue_entry(queue_t* pqueue, void* item);
/* remove a node from queue */
pnode_t bk_queue_delete(queue_t* pqueue, void* *pitem);
/* iterate queue and call visit with the node */
void bk_queue_traverse(queue_t* pqueue,void (*visit)(pnode_t));
#ifdef __cplusplus
}
#endif
#endif