//队列数据类型定义
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;
}
分享到:
相关推荐
总之,`PriorityQ.java`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...
本项目“停车管理系统(用队列数组实现)”是数据结构的一个实际应用,它利用了队列和数组这两种基本数据结构来模拟停车管理的逻辑。 首先,我们来理解队列。队列是一种先进先出(First In First Out, FIFO)的数据...
队列和数组是另外两个重要的数据结构,队列是一种特殊的线性表,数组是一种常用的数据结构。队列的特点是先进先出(FIFO),数组是一种可以存储多个元素的数据结构。 栈、队列和数组是C语言数据结构中的三个基本...
### 队列数组实现 #### 概述 在计算机科学中,队列是一种非常基本的数据结构,它遵循先进先出(FIFO)的原则。队列可以被用来解决多种问题,比如任务调度、缓存管理等。队列可以通过多种方式实现,其中一种常见的...
队列是一种先入先出的数据结构(FIFO),只允许在前端(front)删除,在后端(rear)插入。容量为capacity大小的内存,只能存capacity-1的元素,其中rear的位置始终为空。 本文实现的队列,功能如下: 1 获取元素内容 ...
在数据结构的学习和应用中,了解并掌握队列及其扩展结构——双端队列的原理和实现,对于成为一名合格的软件开发者至关重要。这不仅有助于理解计算机科学中的高级概念,例如算法和数据处理,也能在实际编程工作中提高...
本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...
数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和操作数据。栈和队列是两种基础且重要的数据...了解并掌握栈和队列的原理和应用,不仅可以提高编程能力,还能为学习更复杂的数据结构和算法打下坚实基础。
数组实现循环队列是一种常用的数据结构,用于实现First-In-First-Out(FIFO)的队列结构。在单片机系统中,数组实现循环队列广泛应用于串口通信中,以避免数据的丢失。 数组实现循环队列的原理是建立一个循环数组,...
链队列,顾名思义,是基于链表实现的队列数据结构。队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构,类似于现实生活中的排队等待。在链队列中,元素按照加入的顺序排列,第一个加入的元素被...
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...
数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...
循环队列是一种线性数据结构,它在物理结构上表现为一个有限大小的数组,但在逻辑结构上,队尾被连接到队头后面,形成一种循环的结构。在C++中,我们可以利用数组来轻松实现这种数据结构。下面将详细介绍如何用数组...
完整代码 正确产生结果 三个类分开写 class linklist { protected: struct node { int data; node *next; }; node *head; int length; public:
由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。
通过学习这个`QueueArray`类,我们可以了解到Java中如何使用数组高效地实现循环队列,并掌握其核心操作。这个简单的数据结构在实际开发中有着广泛的应用,对于提升程序的性能和逻辑清晰度都大有裨益。
双端队列(Double-Ended Queue,简称deque)是一种数据结构,它允许在队列的两端进行插入和删除操作。在C++中,标准库提供了一个名为`deque`的容器,但在这里,我们讨论的是一个自定义实现的基于数组的双端队列类...
本主题关注的是如何使用C语言来实现数据结构中的栈和队列,这是两种基础但非常重要的抽象数据类型(ADT)。 栈(Stack)是具有后进先出(LIFO)特性的数据结构。它类似于一个堆叠的盘子,最新的元素被放在顶部,...
学习数据结构过程中,亲自在VC++上编译通过的使用数组实现队列的源代码,与大家共享。