链表实现的队列
/***********************************************
*file : queue_link.h
************************************************/
#ifndef QUEUE_LINK_H_
#define QUEUE_LINK_H_
#include "ringQueue.h"
#include <string.h>
typedef unsigned char element_t;
typedef struct node
{
element_t data;
node *next;
}node_t;
typedef struct lqueue
{
node_t *rear;
node_t *front;
}queue_link_t;
void init_queue_link(queue_link_t* que);
int read_queue_link(queue_link_t* ptrQue, element_t *elemt);
int write_queue_link(queue_link_t* ptrQue, element_t elmt);
#endif
/***********************************************
*file : queue_link.c
************************************************/
#include "queue_link.h"
void init_queue_link(queue_link_t* que)
{
que->front = NULL;
que->rear = NULL;
}
int read_queue_link(queue_link_t* ptrQue, element_t *elemt)
{
node_t *cell;
queue_link_t *pQue = ptrQue;
if(pQue->front == NULL){
printf("Queue is empty\r\n");
return -1;
}
cell = pQue->front;
if(pQue->front == pQue->rear)
pQue->front = pQue->rear = NULL;
else
pQue->front = pQue->front->next;
elemt = cell->data;
free(cell);
return 1;
}
int write_queue_link(queue_link_t* ptrQue, element_t elmt)
{
queue_link_t *pQue = ptrQue;
node_t *cell;
cell = (node_t *)malloc(sizeof(node_t));
cell->next = NULL;
memcpy(&(cell->data), &elmt, sizeof(element_t));
if(pQue->front == NULL)
{
pQue->front = cell;
}
else
pQue->rear->next = cell;
pQue->rear = cell;
return sizeof(element_t);
}
数组实现的队列
/***********************************************
*file : queue_ring.h
************************************************/
#ifndef __RINGQUEUE_H__#define __RINGQUEUE_H__
#ifdef __cplusplus
extern "C"
{
#endif
#define MAXSZ 256
typedef struct elementType
{
unsigned char dat;
}elementType_t;
typedef struct ringQueue
{
unsigned char dat[MAXSZ];//elementType_t dat[MAXSZ];
int rear;
int front;
}ringQueue_t;
void init_queue_ring(ringQueue_t *ptrQue);
void write_queue_ring(ringQueue_t *ptrQue,unsigned char item);
int read_queue_ring(ringQueue_t *ptrQue,unsigned char *dat);
#ifdef __cplusplus
}
#endif
#endif
/***********************************************
*file : queue_ring.c
************************************************/
#include "queue_ring.h"#include <string.h>
void init_queue_ring(ringQueue_t *ptrQue)
{
ptrQue->front = 0;
ptrQue->rear = 0;
//memset(ptrQue->dat,0,sizeof(ptrQue->dat));
}
void write_queue_ring(ringQueue_t *ptrQue,unsigned char item)
{
if((ptrQue->rear+1)%MAXSZ == ptrQue->front)
{
//printf("queue full\n");
return;
}
//printf("put is %d\n", item);
ptrQue->rear = (ptrQue->rear+1)%MAXSZ;
ptrQue->dat[ptrQue->rear] = item;
}
int read_queue_ring(ringQueue_t *ptrQue,unsigned char *dat)
{
if(ptrQue->front == ptrQue->rear)
{
//printf("queue empty\n");
return -1;
}
else
{
ptrQue->front = (ptrQue->front+1)%MAXSZ;
*dat = ptrQue->dat[ptrQue->front];
//printf("get is %d\n",*buf);
return 1;
}
}