队列(FIFO)一种数据结构,特点先入先出。应用比如消息处理等,消息无法第一时间响应,先将消息入队,顺序执行。
队列实现基本步骤:创建、删除、入队、出队。复杂逻辑也是基于基本形式扩展。
简单数组实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
/************struct definition**************/
typedef struct msg_tag{
int msg_type;
int msg_body;
}msg_t;
typedef struct queue_tag{
int front;
int rear;
int queue_size;
int msg[5];
}queue_t;
/***********function declaraction***************/
queue_t *creat_queue(void);
void delete_queue(queue_t *queue);
int en_queue(int msg,queue_t *queue);
int re_queue(queue_t *queue);
void udelay(void);
/**********function definition***********/
queue_t *creat_queue(void){
queue_t *queue_handle = NULL;
queue_handle = (queue_t *)malloc(sizeof(queue_t));
if(queue_handle == NULL){
return NULL;
}
memset(queue_handle,0,sizeof(queue_t));
return queue_handle;
}
void delete_queue(queue_t *queue){
free(queue);
}
int is_full(queue_t *queue){
return (queue->queue_size == 5)?TRUE:FALSE;
}
int is_empty(queue_t *queue){
return (queue->queue_size == 0)?TRUE:FALSE;
}
int en_queue(int msg,queue_t *queue){
if(TRUE == is_full(queue)){
return FALSE;
}
queue->msg[queue->rear] = msg;
queue->rear = (queue->rear+1)%5;
queue->queue_size++;
return TRUE;
}
int re_queue(queue_t *queue){
int msg_print = 0;
if(TRUE == is_empty(queue)){
return FALSE;
}
msg_print = queue->msg[queue->front];
queue->front = (queue->front+1)%5;
queue->queue_size--;
printf("data :%d\n",msg_print);
return TRUE;
}
int main(int argc,char **argv){
queue_t *demo_queue;
demo_queue = creat_queue();
if(FALSE == en_queue(100,demo_queue)){
printf("en fail!\n");
}
udelay();
if(FALSE == re_queue(demo_queue)){
printf("re fail!\n");
}
if(FALSE == re_queue(demo_queue)){
printf("re fail!\n");
}
return 0;
}
void udelay(void){
int i = 0;
for(i = 0;i <30000;i++){
}
}