`
u010815305
  • 浏览: 30182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据结构学习之队列的数组实现

 
阅读更多

//队列数据类型定义
typedef int ElementType;
#ifndef _Queue_h
struct QueueRecord;
typedef struct QueueRecord *Queue;


int IsEmpty(Queue Q);
int IsFull(Queue Q);
Queue CreateQueue(int MaxElements);
void DisposeQueue(Queue Q);
void MakeEmpty(Queue Q);
void Enqueue(ElementType X,Queue Q);
ElementType Front(Queue Q);
void Dequeue(Queue Q);
ElementType FrontAndDequeue(Queue Q);


#endif

//queue.c

#include "queue.h"
#include "fatal.h"


#define MinQueueSize (5)


struct QueueRecord
{
int Capacity;
int Front;
int Rear;
int Size;
ElementType *Array;
};
int IsEmpty(Queue Q)
{
return Q->Size==0;
}
int IsFull(Queue Q)
{
return Q->Size==Q->Capacity;
}

//创建队列
Queue CreateQueue(int MaxElements)
{
Queue Q;
if(MaxElements<MinQueueSize)
Error("Queue size is too small");
Q=malloc(sizeof(struct QueueRecord));
if(Q==NULL)
FatalError("Out of space");
Q->Array=malloc(sizeof(ElementType)*MaxElements);

if(Q->Array==NULL)
FatalError("Out of space");
Q->Capacity=MaxElements;
MakeEmpty(Q);

return Q;
}


void MakeEmpty(Queue Q)
{
Q->Size=0;
Q->Front=1;
Q->Rear=0;
}
void DisposeQueue(Queue Q)
{
if(Q!=NULL)
{
free(Q->Array);
free(Q);
}
}

//队头和队尾的设置
static int Succ(int Value,Queue Q)
{
if(++Value==Q->Capacity)
Value=0;
return Value;
}
void Enqueue(ElementType X,Queue Q)
{
if(IsFull(Q))
Error("Full Queue");
else
{
Q->Size++;
Q->Rear=Succ(Q->Rear,Q);
Q->Array[Q->Rear]=X;
}
}


ElementType Front(Queue Q)
{
if(!IsEmpty(Q))
return Q->Array[Q->Front];
Error("Empty queue");
return 0;
}
void Dequeue(Queue Q)
{
if(IsEmpty(Q))
Error("Empty queue");
else
{
Q->Size--;
Q->Front=Succ(Q->Front,Q);
}
}


ElementType FrontAndDequeue(Queue Q)
{
ElementType X=0;

if(IsEmpty(Q))
Error("Empty queue");
else
{
Q->Size--;
X=Q->Array[Q->Front];
Q->Front=Succ(Q->Front,Q);

}
return X;
}



分享到:
评论

相关推荐

    用数组实现的优先队列(JAVA)

    总之,`PriorityQ.java`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...

    停车管理系统(用队列数组实现)-数据结构

    本项目“停车管理系统(用队列数组实现)”是数据结构的一个实际应用,它利用了队列和数组这两种基本数据结构来模拟停车管理的逻辑。 首先,我们来理解队列。队列是一种先进先出(First In First Out, FIFO)的数据...

    c语言数据结构-栈队列数组完美版资料.ppt

    队列和数组是另外两个重要的数据结构,队列是一种特殊的线性表,数组是一种常用的数据结构。队列的特点是先进先出(FIFO),数组是一种可以存储多个元素的数据结构。 栈、队列和数组是C语言数据结构中的三个基本...

    队列数组实现

    ### 队列数组实现 #### 概述 在计算机科学中,队列是一种非常基本的数据结构,它遵循先进先出(FIFO)的原则。队列可以被用来解决多种问题,比如任务调度、缓存管理等。队列可以通过多种方式实现,其中一种常见的...

    C++数据结构之数组队列模版实现

    队列是一种先入先出的数据结构(FIFO),只允许在前端(front)删除,在后端(rear)插入。容量为capacity大小的内存,只能存capacity-1的元素,其中rear的位置始终为空。 本文实现的队列,功能如下: 1 获取元素内容 ...

    经典数据结构队列的研究和实现.pdf

    在数据结构的学习和应用中,了解并掌握队列及其扩展结构——双端队列的原理和实现,对于成为一名合格的软件开发者至关重要。这不仅有助于理解计算机科学中的高级概念,例如算法和数据处理,也能在实际编程工作中提高...

    队列的链表与数组分别实现

    本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...

    数据结构 栈和队列PPT

    数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和操作数据。栈和队列是两种基础且重要的数据...了解并掌握栈和队列的原理和应用,不仅可以提高编程能力,还能为学习更复杂的数据结构和算法打下坚实基础。

    数组实现循环队列

    数组实现循环队列是一种常用的数据结构,用于实现First-In-First-Out(FIFO)的队列结构。在单片机系统中,数组实现循环队列广泛应用于串口通信中,以避免数据的丢失。 数组实现循环队列的原理是建立一个循环数组,...

    数据结构:链队列

    链队列,顾名思义,是基于链表实现的队列数据结构。队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构,类似于现实生活中的排队等待。在链队列中,元素按照加入的顺序排列,第一个加入的元素被...

    数组和链表实现队列

    本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...

    数组、链表、队列、栈数据结构特点,各自优点和缺点 数组和链表.pdf

    数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...

    用数组实现一个循环队列

    循环队列是一种线性数据结构,它在物理结构上表现为一个有限大小的数组,但在逻辑结构上,队尾被连接到队头后面,形成一种循环的结构。在C++中,我们可以利用数组来轻松实现这种数据结构。下面将详细介绍如何用数组...

    数据结构 链表 队列 堆栈

    完整代码 正确产生结果 三个类分开写 class linklist { protected: struct node { int data; node *next; }; node *head; int length; public:

    数组实现队列

    由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。

    用数组实现的循环队列(java)

    通过学习这个`QueueArray`类,我们可以了解到Java中如何使用数组高效地实现循环队列,并掌握其核心操作。这个简单的数据结构在实际开发中有着广泛的应用,对于提升程序的性能和逻辑清晰度都大有裨益。

    用数组实现的双端队列(类模板)

    双端队列(Double-Ended Queue,简称deque)是一种数据结构,它允许在队列的两端进行插入和删除操作。在C++中,标准库提供了一个名为`deque`的容器,但在这里,我们讨论的是一个自定义实现的基于数组的双端队列类...

    C语言-数据结构-栈队列实现

    本主题关注的是如何使用C语言来实现数据结构中的栈和队列,这是两种基础但非常重要的抽象数据类型(ADT)。 栈(Stack)是具有后进先出(LIFO)特性的数据结构。它类似于一个堆叠的盘子,最新的元素被放在顶部,...

    数组队列实现

    学习数据结构过程中,亲自在VC++上编译通过的使用数组实现队列的源代码,与大家共享。

Global site tag (gtag.js) - Google Analytics