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*/

相关文章推荐

队列 Queue 的定义及实现

队列 Queue 的定义及实现

循环队列ADT_SeqQueue

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

顺序队列(Sequential Queue)

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

Underscore使用方法

从其他语言转向Javascript时,通常都会遇到一些困惑性问题。比如,Java中的HashMap在Javascript中如何实现?Javascript面向对象式编程如何实现继承?如何实现通用的ite...
  • lybwwp
  • lybwwp
  • 2016年03月09日 11:25
  • 2266

Node.js的TLS/SSL模块详解

第一步:我们自己扮演CA机构,给自己的服务器颁发签名证书,这个证书是CA机构的证书 openssl genrsa -out ca.key 1024 //这里是CA生成的私钥,文件名为ca.key op...

数据结构封装之《SeqQueue2.0改进顺序式队列》

学习记录

数据结构封装之《SeqQueue顺序式队列》

学习记录

数据结构之循环顺序队列

  • 2014年05月30日 09:10
  • 1KB
  • 下载

实现顺序栈或循环队列的存储

  • 2011年04月21日 17:55
  • 194KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SeqQueue--顺序循环队列
举报原因:
原因补充:

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