SeqQueue--顺序循环队列

原创 2012年03月28日 00:37:15
看完复仇看了看队列。花了半小时来编写、调试。写完博客再去温习下枪火
/*
** File name: SeqQueue.h
** Author: ZhouFeng
** Date: 2012/03/27
*/
#ifndef SEQ_QUEUE_H
#define SEQ_QUEUE_H

#define BOOL int
#define ERROR 0
#define SUCCESS 1
#define TRUE 1
#define FALSE 0
#define MAX_SIZE 100

typedef int EleType;
typedef struct SeqQueue
{
    EleType _seqQueue[MAX_SIZE];
    /* End of queue */
    int nRear;
    /* Front of queue */
    int nFront;
    /* Counter number of element */
    int nCount;
}SeqQueue;

/* Operation */
void InitSeqQueue(SeqQueue *Q);
int SeqQueueAppend(SeqQueue *Q, EleType data);
int SeqQueueDelete(SeqQueue *Q, EleType *data);
BOOL IsQueueEmpty(SeqQueue *Q);
int GetQueue(SeqQueue *Q, EleType *data);

#endif
/*
** File name: SeqQueue.c
** Author: ZhouFeng
** Date: 2012/03/27
*/
#include <stdlib.h>
#include <stddef.h>
#include "SeqQueue.h"

void InitSeqQueue(SeqQueue *Q)
{
    /*  Deal Q is NULL pointer. */
    if(Q == NULL)
    {
	return;
    }

    Q->nRear = 0;
    Q->nFront = 0;
    Q->nCount = 0;
}

int SeqQueueAppend(SeqQueue *Q, EleType data)
{
    if(Q == NULL)
    {
	return ERROR;
    }

    /*  Deal Q is full. */
    if(Q->nCount > 0 && Q->nFront == Q->nRear)
    {
	return ERROR;
    }

    /* Insert at the end of Queue */
    Q->_seqQueue[Q->nRear] = data;
    ++(Q->nRear);
    Q->nRear %= MAX_SIZE;
    ++(Q->nCount);

    return SUCCESS;
}

int SeqQueueDelete(SeqQueue *Q, EleType *data)
{
    if(Q == NULL)
    {
	return ERROR;
    }

    /* Deal with Q is empty. */
    if(Q->nCount == 0)
    {
	return ERROR;
    }

    *data = Q->_seqQueue[Q->nFront];
    Q->nFront += 1;
    Q->nFront %= MAX_SIZE;
    --(Q->nCount);

    return SUCCESS;
}

BOOL IsQueueEmpty(SeqQueue *Q)
{
    if(Q == NULL)
    {
	return FALSE;
    }

    if(Q->nCount == 0)
    {
	return TRUE;
    }
    else
    {
	return FALSE;
    }
}

int GetQueue(SeqQueue *Q, EleType *data)
{
    if(Q == NULL)
    {
	return ERROR;
    }

    if(Q->nCount == 0)
    {
	return FALSE;
    }

    *data = Q->_seqQueue[Q->nFront];

    return SUCCESS;
}
/* End ~SeqQueue.c*/

顺序队列(Sequential Queue)

顺序队列(Sequential Queue) 1. 顺序队列的概念 1.1 顺序队列的定义 顺序队列是基于数组的存储表示实现的队列。 1.2 顺序队列中各元素的逻辑及存储关系 顺序队列可以采用...
  • cainv89
  • cainv89
  • 2016年05月26日 19:05
  • 3537

SeqQueue

注意由于模板的二次编译,最好让其实现放在头文件中,第一次编译在编译期就确定下来; SeqQueue.h template class SeqQueue{ public: SeqQu...
  • weng960920
  • weng960920
  • 2017年04月15日 21:49
  • 262

循环队列ADT_SeqQueue

队列的顺序表示中,可能会出现队列有空位却产生溢出,这就是"假溢出"现象。解决方法是把队列从逻辑上看成是一个头尾相连的环, 再有新元素需要入队时,就可以将新元素存入下标0的位置。 队头指针进1:fron...
  • GKHack
  • GKHack
  • 2015年09月29日 23:28
  • 3309

循环队列——队列的顺序表示和实现

本例程用循环队列实现了一个简单的应用模型。
  • u011362297
  • u011362297
  • 2014年04月19日 11:48
  • 1609

队列的顺序存储实现—循环队列

队列(queue)是一种只允许在一端插入元素,而在另一端删除元素的线性表。它是一种先进先出(First In First Out,FIFO)的线性表。我们把允许插入的一端称为队尾,允许删除元素的一端称...
  • chewbee
  • chewbee
  • 2015年04月17日 21:37
  • 2232

队列的顺序表示及实现,循环队列

判满条件为:front=(rear+1)%size
  • u010273604
  • u010273604
  • 2015年05月18日 12:07
  • 1126

循环顺序队列介绍及其C++实现

循环队列的介绍及C++实现方法
  • coderNim
  • coderNim
  • 2016年11月27日 13:10
  • 550

队列的顺序存储结构——循环队列 图解和代码实现

队列的顺序存储结构——循环队列 循环队列的长度为(rear-front+QueueSize)%QueueSize 队空的条件: front=rear 队满的条件是: (rear+1)%Queue...
  • ggxxkkll
  • ggxxkkll
  • 2013年03月11日 23:07
  • 9832

数据结构:队列的顺序存储结构(循环队列)

队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的线性表(FIFO)。允许插入的一端称为队尾,允许删除的一端称为队头。我们在《栈的顺序存储结构》中发现,栈操...
  • Sandeldeng
  • Sandeldeng
  • 2016年11月01日 21:14
  • 999

循环队列——队列的顺序表示和实现

前面分析顺序队的时候,我们知道,顺序队存在”假溢出”的问题,这个问题有时会造成很大的内存浪费,循环队列就是为了解决这个问题而提出地一个很巧妙的办法.循环队列和顺序队列的主要区别在于:循环队列将顺序队列...
  • lym152898
  • lym152898
  • 2016年08月14日 16:59
  • 1826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SeqQueue--顺序循环队列
举报原因:
原因补充:

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