`

SeqQueue--顺序循环队列

 
阅读更多
看完复仇看了看队列。花了半小时来编写、调试。写完博客再去温习下枪火
/*
** 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*/
分享到:
评论

相关推荐

    循环队列源代码

    循环队列源代码 循环队列是一种数据结构,它通过一个数组或链表来存储元素,并提供了队列操作的接口。队列是一种先进先出的数据结构,元素的添加和删除都是从队头和队尾进行的。在本资源中,我们将探讨循环队列的...

    漫话数据结构-顺序队列.ppt

    在Java编程语言中,我们可以创建一个名为`SeqQueue`的类来表示顺序队列。这个类通常包含以下几个重要属性: 1. `queueElem`:这是一个Object类型的数组,用于存储队列中的元素。 2. `front`:一个整型变量,表示队...

    顺序队列C实现

    顺序队列是一种线性数据结构,它按照元素在内存中的存储方式来划分,所有元素在内存中连续存放,类似于数组。这种数据结构在处理大量数据时具有高效的特点,因为访问和操作元素通常只需要一个地址计算。本文将详细...

    循环队列实验报告.pdf

    // 初始化顺序循环队列 if(queueEmpty(L))// 判断空队列 cout当前队列空! "; else cout当前队列非空! "; cout请输入入队元素的最大元素x="; cin&gt;&gt;x; if(x) { while(x!=0) { enQueue(&L, x);//循环入队...

    顺序队列C实现优化

    顺序队列是一种线性数据结构,它按照元素的顺序存储,并通过两端的操作进行插入和删除。在C语言中实现顺序队列,我们通常使用数组作为底层数据容器。在这个"顺序队列C实现优化"中,重点是提高了空间效率,使得其空间...

    循环队列c++实现c++实现

    循环队列是计算机科学中数据结构的一种,它在顺序存储结构上实现,具有队列的先进先出(FIFO)特性。在循环队列中,队尾指针会在达到数组界限后回到数组的起始位置,形成一种循环的效果,从而避免了普通队列在满时...

    顺序表 栈 队列的操作

    文件中定义了一个名为`SeqQueue`的顺序队列结构体,用于实现循环队列。通过两个指针`front`和`rear`表示队列的头部和尾部,并提供了队列的基本操作框架。 ### 四、综合运用案例分析 文件中还展示了如何创建时间...

    栈和队列的基本操作实现及其应用

    * `int QueueEmpty(SeqQueue Q)`: 判断队列是否为空。 三、栈和队列的应用 栈和队列在实际问题中的应用非常广泛,例如: * 判断回文:使用栈可以判断一个字符串是否为回文。 * 模拟队列的管理:使用队列可以模拟...

    数据结构队列的实现

    首先,循环队列的结构定义为`seqqueue`,包含一个整型数组`data`用于存储队列元素,以及两个整型变量`front`和`rear`分别表示队首和队尾的索引。由于采用了循环结构,队列满和队列空的情况需要特殊处理。队列满的...

    两种情况下的队列操作

    在这个例子中,通过定义`SeqQueue`结构体来表示循环队列,并实现了初始化、判断队空、判断队满、入队、出队和统计队列元素数量等基本操作。 ##### 1. 初始化队列 `InitQueue` ```c SeqQueue*InitQueue()//置空队 { ...

    数据结构各种算法实现(链表、队列、树、栈、串、)

    顺序队列 (SeqQueue.h) 顺序队列是通过顺序表实现的队列数据结构,遵循先进先出的原则。 **重要成员函数:** - **Enqueue()**: 入队操作。 - **Dequeue()**: 出队操作。 - **IsEmpty()**: 判断队列是否为空。 - ...

    2.3队列

    在顺序存储结构中,队列通常使用数组实现,称为循环队列。循环队列克服了普通数组作为队列时可能出现的“假溢出”问题。通过取模运算符%,可以使得队列的头尾在数组中形成一个循环,即使队列满时,最后一个元素的下...

    数据结构实验4队列的表示与操作.pdf

    循环队列是一种特殊的顺序队列,它使用数组来存储队列元素,并且使用头指针和尾指针来标记队列的头部和尾部。循环队列的表示可以使用结构体来实现,如下所示: ```c typedef struct { DataType data[Maxsize]; /* ...

    数据结构各种算法实现(C++模板)

    - **顺序队列(SeqQueue.h)** - 顺序队列同样基于顺序表实现,支持先进先出(FIFO)的操作。 - 主要操作包括入队(enqueue)和出队(dequeue)。 - **链式队列(LinkQueue.h)** - 链式队列基于链表实现,每个...

    在数据结构中用队列实现杨惠三角

    // 定义顺序队列结构体 typedef struct { QueueElemType element[MAXSIZE]; int front; int rear; } SeqQueue; // 初始化队列 void InitQueue(SeqQueue* Q) { Q-&gt;front = Q-&gt;rear = 0; } // 入队操作 int ...

    数据结构各种算法模板C++实现

    - **定义与特性:** 顺序队列是一种基于顺序表实现的队列,遵循先进先出(FIFO)的原则。 - **基本操作:** - 创建队列:初始化一个空队列。 - 入队:向队尾添加一个元素。 - 出队:从队头移除一个元素。 - 查看队...

    数据结构各种算法实现(C++模板)【高清】

    - 循环链表(CircularList):其特点是尾节点的下一个节点指针指向头节点,形成一个环形结构,便于实现循环队列等数据结构。 - 顺序栈(SeqStack):基于顺序表实现的后进先出(LIFO)的存储结构,用于实现函数调用和...

    杨辉三角C++编程

    `SeqQueue`是一个基于数组实现的顺序队列。它包含了一些基本的操作方法: - `EnQueue`: 向队列末尾添加一个元素。 - `DeQueue`: 从队列头部移除一个元素。 - `getFront`: 获取队列头部元素的值。 - `IsEmpty`: 判断...

    c++数据结构各种算法实现

    根据给定的信息,本文将对C++中实现的数据结构及算法进行详细解析,涉及的知识点包括:顺序表、单链表、双向链表、循环链表、顺序栈、链式栈、顺序队列、链式队列、优先级队列、串、二叉树、线索二叉树、堆、哈夫曼...

Global site tag (gtag.js) - Google Analytics