数据结构之队列(数组实现)

/****************************
* Date   : 2015-07-23
* Description: queue.h
*****************************/
#ifndef _QUEUE_H
#define _QUEUE_H

// class queue
template<class T>
class Queue{
public:
 Queue(int MaxQueueSize = 10);
 ~Queue() {delete [] queue;}
 bool IsEmpty() const {return front == rear;}
 bool IsFull() const {return (((rear+1)%MaxSize == front) ? 1 : 0);}
 T Front() const; // 返回队首元素
 T Rear() const;  // 返回队尾元素
 Queue<T>& Push(const T &x); //队尾添加元素
 Queue<T>& Pop();   //删除队首元素,但不返回其值
 int size() const; // 返回队列中元素的个数
private:
 int front;
 int rear;
 int MaxSize;
 T *queue;
};
//
template<class T>
Queue<T>::Queue(int MaxQueueSize /* = 10 */)
{
 MaxSize = MaxQueueSize + 1;
 front = rear = 0;
 queue = new T[MaxSize];
}
//
template<class T>
T Queue<T>::Front() const
{
 if(IsEmpty())
  throw out_of_range("队列为空!");
 return queue[(front+1)%MaxSize];
}
//
template<class T>
T Queue<T>::Rear() const
{
 if(IsEmpty())
  throw out_of_range("队列为空!");
 return queue[rear];
}
//
template<class T>
Queue<T>& Queue<T>::Push(const T &x)
{
 if(IsFull())
  throw out_of_range("队列已满!");
 rear = (rear + 1) % MaxSize;
 queue[rear] = x;
 //queue[(rear+1)%MaxSize] = x; // 注意此错误!!!
 return *this;
}
//
template<class T>
Queue<T>& Queue<T>::Pop()
{
 if(IsEmpty())
  throw out_of_range("队列为空!");
 front = (front + 1) % MaxSize;
 return *this;
}
//
template<class T>
int Queue<T>::size() const
{
 if(front < rear)
  return (rear - front);
 else
  return (front - rear);

}
#endif // _QUEUE_H

时间: 2024-10-26 21:06:49

数据结构之队列(数组实现)的相关文章

数据结构实践——队列数组

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目. [项目 - 队列数组] 创建10个队列,分别编号为0-9(处理为队列数组,编号即下标).输入若干个正整数,以数字0作为结束.设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中.最后输出所有的非空队列. 要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可. 设程序运行时输入:70 59 90 72 67 88 80 64

【数据结构】队列-数组的实现

首先定义队列的基本结构,队列和栈不同之处在于队列需要两个指针,一个指向头,一个指向尾 String[] queue; int front = 0; int rear = 0; 构造方法 public QueueOfStrings(int capacity) { queue = new String[capacity]; } 进队列 public void enqueue(String str) { queue[rear++] = str; if (rear == queue.length) re

Python与数据结构[2] -&gt; 队列/Queue[0] -&gt; 数组队列的 Python 实现

队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- 下面将使用Python中的list来替代C语言中的数组实现数组队列的数据结构. Note: 这里的实现并没有像C语言中的申请一块固定大小的数组,手动的定制数组中队列的头尾位置,而是利用list的特性直接完成,因此较为简单. 数组队列的实现与数组栈的实现基本类似,同时入列和出列也十分简单,仅需要对数组进行操作即

Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列.最简单的例子就是我们平时的排队,先进先出. 顺序队列的存储结构 下图是一个有6个存储空间的顺序队列的动态示意图,图中front

数据结构之队列定义及基本操作实现

数据结构学着就是有意思,真诚推荐郝斌老师的数据结构视频,真的讲解的非常详细,容易理解. 一直在跟着郝斌老师的数据结构视频学习,看完了队列的视频,记录下来,总结一下. 队列的定义:队列是一种特殊的线性表,只允许在表的头部(front处)进行删除操作,在表的尾部(rear处)进行插入操作的线性数据结构,这种结构就叫做队列.进行插入操作的一端称为队尾,进行删除操作的一端称为队尾. 队列的类型:链式队列,即用链表实现的队列.静态队列:即用数组实现的队列.在这里,我们采用用数组实现的静态队列.因为用链表实

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a

数据结构之队列and栈总结分析

一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的实际生活不难理解,排队就是有先后顺序,先到先得,其实在程序数据结构中的队列其效果也是一样,及先进先出.    队列大概有如下一些特性: 1.操作灵活,在初始化时不需要指定其长度,其长度自动增加(默认长度为32) 注:在实际使用中,如果事先能够预估其长度,那么在初始化时指定长度,可以提高效率    

SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i ).显然,一个稀疏矩阵的转置仍然是稀疏矩阵.你的任务是对给定一个m*n的稀疏矩阵( m

(2)redis的基本数据结构是动态数组

redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: 1.不需要初始化,数组名直接就是所在的偏移   2.不占任何空间,指针需要占用int长度空间,空数组不占任何空间.  这个数组不占用任何内存,意味着这样的结构节省空间: 该数组的内存地址就和他后面的元素的地址相同,意味着无需初始化,数组名就是后面元素的地

队列——数组实现

引言: 队列的实现除了链表外,也可用数组实现. 分析描述: 队列的结构: typedef int ElementType; typedef struct QueueRecord{ int Capacity; int Front; int Rear; int Size; ElementType *Array; }QueueRecord, *Queue; 创建队列: void MakeEmpty(Queue Q) { Q->Size = 0; Q->Front = 1; Q->Rear =