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

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

 

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

 

 

 

 

 

 

 

 

 

 

 

代码都可以运行。

 

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值