`
u010815305
  • 浏览: 30541 次
  • 性别: 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`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...

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

    例如,栈和队列都是线性表的特例,数组可以看作是实现其他数据结构如矩阵、向量的基础。正确地使用和实现这些基本数据结构,不仅可以提高数据处理的效率,还能提升程序的可读性和可维护性。 总结来说,栈、队列和数...

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

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

    队列数组实现

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

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

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

    数组实现循环队列

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

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

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

    数据结构:链队列

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

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

    在计算机程序设计中,队列的实现可以通过不同的数据结构来完成,主要包括数组和链表。数组实现的队列操作简单明了,但存在一个显著的缺点,即队列的大小在初始化时便已固定,难以应对动态变化的需求。数组队列的另一...

    数组和链表实现队列

    本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(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++上编译通过的使用数组实现队列的源代码,与大家共享。

    数据结构-03-123栈队列数组-691.ppt

    数据结构-03-123栈队列数组-691.ppt

Global site tag (gtag.js) - Google Analytics