循环队列和链表队列代码

来源:互联网 发布:杭州数据资源管理局 编辑:程序博客网 时间:2024/06/04 23:34

链表实现的队列

/***********************************************

*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;
}
}




















0 0
原创粉丝点击