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

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





代码都可以运行。




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

JAVA数据结构之循环队列的实现

1、循环队列CircleQueue类的实现代码如下所示: public class CircleQueue { private Object[] array; private int capac...
  • dianzigaoshou
  • dianzigaoshou
  • 2017年07月07日 11:18
  • 164

数据结构-循环队列的基本操作

题目要求:(1)初始化循环队列q (2)判断循环队列q是否为空 (3)元素a,b,c依次入队(4)出队一个元素,并输出该元素 (5)元素d,e,f依次入队 (6)将队列q中所有元素出队并输出此时的出队...
  • weixin_38158043
  • weixin_38158043
  • 2017年11月01日 15:28
  • 195

C#数据结构回顾之循环队列

引言:队列就和我们平常排队买肾6一样,排队第一个肯定先能买到,也具有“先进先出”即所谓的FIFO,其实质用一维数组来存放顺序队列中的数据元素。插入操作限定在表的尾部而其它操作限定在表的头部进行的。队头...
  • CrazyMo_
  • CrazyMo_
  • 2015年05月29日 16:17
  • 1328

数据结构队列C++实现 链式和循环

#include #include #include using namespace std; namespace my_space { template class queue...
  • a363344923
  • a363344923
  • 2014年12月07日 15:34
  • 1697

数据结构-循环顺序队(C语言)

循环队列中,空队、满队判决条件(head==tail)出现二义性。 以下代码采用人为浪费一个单元方式解决二义性问题。 空队特征:head=tail 满队特征:head=(tail+1)%QueueMa...
  • Yeziquanquan
  • Yeziquanquan
  • 2016年09月11日 01:17
  • 708

数据结构-队列实验报告

数据结构-队列实验报告 19150206史胜旺 实验内容        用顺序表实现队列时,由于出队列操作、使得队列中的部分空间未使用,空间利用率低,为了提高队列的空间利用率,提出了循环队列的概...
  • qq_33160271
  • qq_33160271
  • 2017年03月23日 14:15
  • 1065

经典的数据结构——队列

超级经典的数据结构,代码如下: // testconsole.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include...
  • shine_journey
  • shine_journey
  • 2016年08月29日 16:11
  • 178

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

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

数据结构:循环队列(队列的顺序表示)

原文地址:http://blog.csdn.net/lpp0900320123/article/details/20694409#comments http://blog.csdn.net/ns_co...
  • tomcmd
  • tomcmd
  • 2015年08月28日 21:47
  • 978

用Python实现的数据结构与算法-队列

1.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行。   2.ADT 队列ADT(抽象数据类型)一般提供以下...
  • CherDW
  • CherDW
  • 2017年02月13日 12:37
  • 574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典的数据结构——循环队列
举报原因:
原因补充:

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