c语言写的循环队列

原创 2006年05月18日 01:06:00
/////////////////////////////////////////////////////////////////////////////////////////////////////
//文件名称:LoopQueue.h
//功能说明:实现了循环队列结构
//使用说明:包含本文件前必须定义QUEUE_ELEMENT_TYPE,它表示队列中元素的类型,还可定义队列的大小QUEUE_MAX_SIZE,默认为
//            64+1,由于队列中始终要有一个空元素,所以实际最多可存64个元素。
/////////////////////////////////////////////////////////////////////////////////////////////////////
#include <memory.h>
#include <assert.h>

#ifndef BOOLEAN
#define BOOLEAN int
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif

//循环队列的大寸(最大尺寸)
#ifndef QUEUE_MAX_SIZE
#define QUEUE_MAX_SIZE 64+1
#endif

#define LOOPQUEUEASSERT assert(pLQ != 0 && pLQ->front >=0 && pLQ->rear >= 0 && QUEUE_MAX_SIZE > 1)

struct LoopQueue
{
  QUEUE_ELEMENT_TYPE data[QUEUE_MAX_SIZE];
  long                front;
  long                rear;
};

//初始化循环队列
void LoopQueue_Init(LoopQueue *pLQ)
{
    pLQ->front = 0;
      pLQ->rear  = 0;
    LOOPQUEUEASSERT;
}

//判断循环队列是否为空
BOOLEAN LoopQueue_IsEmpty(LoopQueue *pLQ)
{
     LOOPQUEUEASSERT;
     return pLQ->rear==pLQ->front; 
}

//获取循环队列中存储的元素的个数
long LoopQueue_Length(LoopQueue *pLQ)
{
    LOOPQUEUEASSERT;
    return (pLQ->rear-pLQ->front+QUEUE_MAX_SIZE)%QUEUE_MAX_SIZE;
}

//入队
void LoopQueue_In(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE element)
{
    LOOPQUEUEASSERT;
       if(pLQ->front==(pLQ->rear+1)%QUEUE_MAX_SIZE)
       {
         pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE;
        pLQ->data[pLQ->rear] = element;
         pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE;
       }
       else
       {
         pLQ->rear=(pLQ->rear+1)%QUEUE_MAX_SIZE;
         pLQ->data[pLQ->rear] = element;
       }
}

//出队
BOOLEAN LoopQueue_Out(LoopQueue *pLQ, QUEUE_ELEMENT_TYPE* pElement)
{
    LOOPQUEUEASSERT;
       if(LoopQueue_IsEmpty(pLQ))
        return FALSE;

    pLQ->front=(pLQ->front+1)%QUEUE_MAX_SIZE;
    *pElement = pLQ->data[pLQ->front];
    return TRUE;
}

相关文章推荐

ubuntu 14.04 基于x86处理器,构建嵌入式linux

1 硬件            普通的PC,x86架构处理器,4G内存;            usb 一个4G,主要用它作为启动LILO和放置根文件系统压缩包。            2 准备工...

#if、#ifdef、#if defined之间的区别

#if的使用说明 #if的后面接的是表达式 #if (MAX==10)||(MAX==20) code... #endif 它的作用是:如果(MAX==10)||(MAX==20)成立,那么...

数据结构C语言版_循环队列

  • 2011年04月12日 10:59
  • 4KB
  • 下载

C语言循环队列

  • 2017年11月09日 15:23
  • 2KB
  • 下载

C语言循环数组做FIFO队列--一些认识

C语言循环数组做FIFO队列 在做通信时,FIFO队列queue是非常好用的,先完成接收通信把接收的数据存在队列里;然后再进行先进先出逐项处理。 C语言用循环数组,通过读位置和写位置循...

数据结构与算法分析学习笔记三-循环队列C语言实现

队列,在日常生活中有很多非常直观的例子。实际生活中的每次排队都是一个队列。今天我们就来看看循环队列的如何用简单的C语言来实现。本文中所有的代码均在anycodes.tk在线编程网站上测试通过。...

循环队列C语言实现

  • 2013年11月27日 17:19
  • 439KB
  • 下载

数据结构:循环队列(C语言实现)

 生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言写的循环队列
举报原因:
原因补充:

(最多只允许输入30个字)