当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

循环队列的实现

发表于: 2013-04-29   作者:chinrui   来源:转载   浏览次数:
摘要: 循环队列(C++) /* ----------------------------自定义循环队列---------------------------------*/ /* function: * add value into the Queue * delete value from the Queue * count the number of in the Queue
循环队列(C++)

/* ----------------------------自定义循环队列---------------------------------*/
/*  function:
 * add value into the Queue
 * delete value from the Queue
 * count the number of in the Queue
 * judge the Queue is empty or not
 * judge the Queue is full or not
 */



#include <iostream>
#include <stdlib.h>

using namespace std;

//the max size is six so the capcity is five
#define MAX_SIZE 6

typedef int Elemtype;
typedef struct {
    Elemtype data[MAX_SIZE];
    int tailIndex;
    int headIndex;
} RoundQueue;

//declare the functions in this program
void initQueue(RoundQueue &);
void addValue(RoundQueue & , Elemtype);
Elemtype delValue(RoundQueue &);
void display(RoundQueue &);
bool isEmpty(RoundQueue &);
bool isFull(RoundQueue &);
int count(RoundQueue &);

int main()
{
    RoundQueue rq;
    initQueue(rq);

    for(int i = 0; i < MAX_SIZE - 1; i ++) {
        addValue(rq , i + 1);
    }
    cout << "---------before delete---------" << endl;
    display(rq);

    /*Elemtype eDel = delValue(rq);
    cout << eDel << endl;*/

    for(int i = 0; i < MAX_SIZE - 2; i++) {
        delValue(rq);
    }
    cout << "---------after delete---------" << endl;
    display(rq);

    for(int i = 0; i < MAX_SIZE - 2; i++) {
        addValue(rq , i + 1);
    }
    cout << "---------add value into the Queue again---------" << endl;
    display(rq);

    int iNumber = count(rq);
    cout << "---------the number of values in the Queue ---------" << endl;
    cout << iNumber << endl;
    return 0;
}

//initial an empty round Queue
void initQueue(RoundQueue &rq) {

    rq.headIndex = 0;
    rq.tailIndex = 0;
}

//add a value into the round Queue
void addValue(RoundQueue &rq , Elemtype value) {

    if(isFull(rq)) {
        return;
    }

    rq.tailIndex = (rq.tailIndex + 1) % MAX_SIZE;
    rq.data[rq.tailIndex] = value;
}

//delete a value from the round Queue
Elemtype delValue(RoundQueue &rq) {

    //judge the Queue is empty or not
    if(isEmpty(rq)) {
        return -1;
    }

    //delete the value and move the head index
    rq.headIndex = (rq.headIndex + 1) % MAX_SIZE;
    Elemtype eReturn = rq.data[rq.headIndex];
    return eReturn;
}

//display the values in the Queue
void display(RoundQueue &rq) {

    //judge the Queue is empty or not
    if(isEmpty(rq)) {
        return;
    }

    int index = (rq.headIndex + 1) % MAX_SIZE;

    //display values in the Queue
    while(true) {
        cout << rq.data[index] << " ";

        if(index == rq.tailIndex) {
            break;
        }

        index = (index + 1) % MAX_SIZE;
    }
    cout << endl;
}

//judge the Queue is empty or not
bool isEmpty(RoundQueue &rq) {

    if(rq.headIndex == rq.tailIndex) {
        return true;
    }

    return false;
}

//judge the Queue is full or not
bool isFull(RoundQueue &rq) {

    if((rq.tailIndex + 1) % MAX_SIZE == rq.headIndex) {
        return true;
    }

    return false;
}

//count the number of values in the queue
int count(RoundQueue &rq) {

    return (rq.tailIndex - rq.headIndex + MAX_SIZE) % MAX_SIZE;
}

循环队列的实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
前天写了栈的实现,今天到队列了,好像明天要期中考试,还是三科,次奥,考吧考吧,五一三天已经贡
循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,
1 队列的基本概念 队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称F
一、双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。双
  前几天和女朋友一起参加一个技术沙龙,走到地铁又想到自己的疑问,为啥很大多数电梯只有向上的
参考:http://kjwy.5any.com/sjjg/content/sjjg03/030403d.htm 和顺序栈相类似,在利用顺序分配存储
队列(queue)是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。 在队列
队列的定义: 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列的抽象数据
先看代码: 代码文件main.c 1 /****************************************************************
1 /* 2 循环队列的基本操作,初始化,入队,遍历,出队等操作 3 */ 4 #include <stdio.h> 5 #
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号