经典的数据结构——循环队列

原创 2016年08月29日 17:15:01

用数组实现循环队列,关键在于,如何实现头指针和尾指针的循环,揭秘如下:

front = ( front + 1) % MAX;
rear = ( rear + 1) % MAX;

代码如下:  

#include <QCoreApplication>
#include <iostream>

using namespace std;

#include <stdio.h>
#include <stdlib.h>


#include <stdio.h>

#define MAX 5

/*Declaration of circular queue.*/
typedef struct
{
    int front   ;
    int rear    ;
    int count   ;
    int ele[MAX]    ;
}CirQueue;

/*Initailization of circular queue.*/
void initCirQueue(CirQueue * q)
{
    q->front =  0;
    q->rear  = -1;
    q->count =  0;
}

/*Check Queue is full or not*/
int isFull(CirQueue * q)
{
    int full=0;

    if(q->count == MAX)
        full = 1;

    return full;
}

/*Check Queue is empty or not*/
int isEmpty(CirQueue * q)
{
    int empty=0;

    if(q->count == 0)
        empty = 1;

    return empty;
}

/*To insert item into circular queue.*/
void insertCirQueue(CirQueue * q, int item)
{
    if( isFull(q) )
    {
        printf("\nQueue Overflow");
        return;
    }

    q->rear = (q->rear+1)%MAX;
    q->ele[q->rear] = item;

    q->count++;

    printf("\nInserted item : %d",item);
}

/*To delete item from queue.*/
int deleteCirQueue(CirQueue * q, int *item)
{
    if( isEmpty(q) )
    {
        printf("\nQueue Underflow");
        return -1;
    }

    *item    = q->ele[q->front];

    q->front = (q->front+1)%MAX;

    q->count--;

    return 0;
}


int main()
{
    int item=0;
    CirQueue q;

    initCirQueue(&q);

    insertCirQueue(&q, 10);
    insertCirQueue(&q, 20);
    insertCirQueue(&q, 30);
    insertCirQueue(&q, 40);
    insertCirQueue(&q, 50);
    insertCirQueue(&q, 60);

    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);


    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);


    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);


    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);


    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);

    insertCirQueue(&q, 60);

    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);


    if ( deleteCirQueue( &q, &item ) == 0 )
        printf("\nDeleted item is : %d",item);

    printf("\n");
    return 0;
}





代码都可以运行。




-----------------

相关文章推荐

C语言数据结构——循环队列

1、若队列的最大尺寸为QueueSize,则队列满的条件是(rear+1)%Queue == Q.front;计算队列长度的公式是:(rear - front + QueueSize)%QueueSi...

再回首,数据结构——循环队列上的常见操作

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。         希望这些能提供给初学者一些参考。 //循环队列的类型描述 #define MaxSiz...

数据结构与算法——循环队列

今天总结循环队列。 什么是队列?    队列跟栈差不多,也是一种操作受限的线性表,只允许在线性表的一端进行插入操作,在另一端进行删除操作。插入的一端称为队尾,删除的一端称为队头,插入操作称为入队,...
  • hsk256
  • hsk256
  • 2015年05月14日 21:43
  • 486

数据结构实验七——循环队列

#include #include #define M 100 int flag=0; typedef struct SqQueue { char *base; int front...

数据结构基础——循环队列的C++实现

一、定义存储基本数据类型的队列 1、创建文件LoopQueue.h ,定义表示队列的类 #ifndef LOOP_QUEUE_H #define LOOP_QUEUE_H /** 环形队列的C++...

数据结构(严蔚敏)之五——循环队列(c语言实现)

在这里我先强调几点概念: 1、在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。 2、在单队列中我们判断队列是否为空的条件是:Q.front==Q.rear;而在循环...

算法与数据结构【四】——C语言实现循环队列

队列是另一种经典数据结构,也是有两种,一是静态队列,即数组实现的循环队列,二是用链表实现的动态队列,今天我写的是循环队列,下面我就详细分析一下循环队列我认为不太好理解的几个点 第零,循环队列的构成,用...
  • NKPDQZ
  • NKPDQZ
  • 2017年02月20日 21:16
  • 289

数据结构之循环队列(顺序表存储)——C++模板类实现

基于数组存储形式的循环队列实现  循环队列的基于数组的存储表示亦称为顺序队列,用一个一维数组elem[maxSize]来实现,其中为了区别队列空与满,该数组中最多存储maxSize-1个元素,如此一来...
  • Mrx_Nh
  • Mrx_Nh
  • 2017年03月11日 14:00
  • 226

数据结构之——基于数组实现的循环队列

#include #include #include #define LEN 6 //定义队列的最大长度 #define true 1 #define false 0 typedef ...

数据结构——14 循环队列

循环队列
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典的数据结构——循环队列
举报原因:
原因补充:

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