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

C语言-循环队列的简单实现

用C语言实现一个循环队列并不难。关键点在于对队列 "空" 和 "满" 状态的判断。 正如《C和指针》中所描写的,有两种方法来实现对队列空和满状态的判断。 在数组中空一个元素不填,起始时, 置t...
  • huangkangying
  • huangkangying
  • 2015年03月04日 22:02
  • 2604

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

生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和...
  • lpp0900320123
  • lpp0900320123
  • 2014年03月07日 19:15
  • 86939

循环队列及C语言实现<一>

循环队列是为了充分利用内存,进行数据操作的一种基本算法。具体实现方式可划分为:链式队列和静态队列,这里所谓的静态是指在一片连续的内存区域进行数据操作。本文只讲述静态队列,也是最简单的实现方式,静态队列...
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2016年09月21日 22:34
  • 3896

循环队列的c语言实现

一、什么是循环队列     1、基本概念     队列就是一个能够实现“先进先出”的存储结构,队列分为链式队列和静态队列。静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费...
  • silent123go
  • silent123go
  • 2016年09月23日 21:04
  • 371

循环队列的综合操作(出入队、获取队长度)C语言实现

线性表有顺序存储和链式存储,栈是线性表,所以也有两种存储方式。同样,队列作为一种特殊的线性表,也同样存在两种存储方式。 那就是顺序队列、链式队列两种 这里主要介绍顺序队列,链式队列我在...
  • zxnsirius
  • zxnsirius
  • 2016年04月21日 21:04
  • 1704

循环队列实现(C语言)

#ifndef __QUEUE_H_ #define __QUEUE_H_ typedef int DataType; ///////////////////////////////...
  • changyourmind
  • changyourmind
  • 2016年10月27日 21:37
  • 912

C语言实现循环队列基本操作(初始化、判断队空、入队、出队)

//循环队列的基本操作 #include #define MaxSize 50 typedef int ElemType; //定义循环队列结构体 typedef struct  ...
  • u012913936
  • u012913936
  • 2015年07月07日 21:48
  • 4659

循环队列及C语言实现<三>

在之前的博客中给出了设计循环队列的思路以及源码,这些可都是经过我长期大数据测试的验证哦。当然,现在的很多开源项目和一些封装好的类或接口也都有类似的队列实现方法,之所以我还在使用自己写的这一套方法,主要...
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2016年12月28日 20:12
  • 650

C语言实现使用动态数组实现循环队列

我在上一篇博客《C语言实现使用静态数组实现循环队列》中实现了使用静态数组来模拟队列的操作。由于数组的大小已经被指定,无法动态的扩展。所以在这篇博客中,我换成动态数组来实现。动态数组可以不断开辟内存空间...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年03月07日 09:18
  • 4764

c语言数据结构中循环队列操作,包括初始化,创建,清空销毁,增添,删除,求队长,遍历等等

数据结构中循环队列的使用
  • wys_NO1
  • wys_NO1
  • 2016年11月02日 19:56
  • 1490
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言写的循环队列
举报原因:
原因补充:

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