您的位置:首页 > 编程语言

循环队列和链表队列代码

2015-02-14 12:28 169 查看

链表实现的队列

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

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: