C#队列的简单使用

队列的特性很简答,就是先进先出,一般利用数组来实现。

实现队列自然要实现几个函数:入队,出队,判断队满,判断队空,获得队头,队尾。

实现队列的关键在于队头指针和队尾指针的设置:

  • 假设初始状态下,队头指针为0,队尾指针为-1,那么两个指针指的位置分别就是队头与队尾。当队尾的下一个是队头时队空,当队尾的下下个是队头时队满。
  • 假设初始状态下,队头队尾指针都为0,那么队尾指针指的是队尾,而队头指针的下一个位置才是队头。当两指针相等时队空,当队尾指针的下一个是队头时队满。

如果我们画个图就会发现,不管怎么设置指针,队满时数组一定还有一个空位。所以数组长度应该比队列长度多1。

同时为了方便,我们会把队列指针设置为循环的,即每次移动后取余数组的长度。

public class MyCircularQueue {
    private int front;
    private int rear;
    private int[] queue;

    public MyCircularQueue(int k) {
        queue=new int[k+1];
        front=0;
        rear=-1;
    }

    public bool EnQueue(int value) {
        if((rear+2)%queue.Length==front)
        return false;
        rear++;rear=rear%queue.Length;
        queue[rear]=value;
        return true;
    }

    public bool DeQueue() {
        if((rear+1)%queue.Length==front)
        return false;
        front++;front=front%queue.Length;
        return true;
    }

    public int Front() {
        if(!IsEmpty())
        return queue[front];
        else
        return -1;
    }

    public int Rear() {
        if(!IsEmpty())
        return queue[rear];
        else
        return -1;
    }

    public bool IsEmpty() {
        if((rear+1)%queue.Length==front)
        return true;
        else
        return false;
    }

    public bool IsFull() {
        if((rear+2)%queue.Length==front)
        return true;
        else
        return false;
    }
}

实际上C#也有一个队列库,如下图所示

需要注意的是Dequeque和ToArray的返回类型都是object,可能需要进行强制转换

   class Program
   {
      static void Main(string[] args)
      {
         Queue q = new Queue();

         q.Enqueue('A');
         char ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
       }
}

到此这篇关于C#队列的简单使用的文章就介绍到这了,更多相关C#队列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#数据结构之队列(Quene)实例详解

    本文实例讲述了C#数据结构之队列(Quene).分享给大家供大家参考,具体如下: 队列(Quene)的特征就是"先进先出",队列把所有操作限制在"只能在线性结构的两端"进行,更具体一点:添加元素必须在线性表尾部进行,而删除元素只能在线性表头部进行. 先抽象接口IQuene<T> namespace 栈与队列 { public interface IQuene<T> { /// <summary> /// 取得队列实际元素的个数 /

  • C#队列Queue用法实例分析

    本文实例分析了C#队列Queue用法.分享给大家供大家参考.具体分析如下: 队列(Queue)在程序设计中扮演着重要的角色,因为它可以模拟队列的数据操作.例如,排队买票就是一个队列操作,后来的人排在后面,先来的人排在前面,并且买票请求先被处理.为了模拟队列的操作,Queue在ArrayList的基础上加入了以下限制 1.元素采用先入先出机制(FIFO,First In First Out),即先进入队列的元素必须先离开队列.最先进入的元素称为队头元素. 元素只能被添加到队尾(称为入队),不允许在

  • C#使用队列(Queue)解决简单的并发问题

    本文通过实例,更具体的讲解了队列,队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. 有一个场景:一个抢购的项目,假设有5件商品,谁先抢到谁可以买,但是如果此时此刻(这里的此时此刻假设是相同的时间),有100人去抢这个商品,如果使用平时的方法会出现什么情况呢?你懂的,这里所说是就是有关并发的问题. 平时我们去超市购物去结账的时候就是排队,这里我们先让抢购人排好队,按时间,谁先点击的抢购

  • C#通过链表实现队列的方法

    本文实例讲述了C#通过链表实现队列的方法.分享给大家供大家参考.具体实现方法如下: public class Node { public int Data { get; set; } public Node Next { get; set; } public Node(int data) { this.Data = data; } } public class Queue { private Node _head; private Node _tail; private int _count =

  • C#队列Queue多线程用法实例

    本文实例讲述了C#队列Queue多线程用法.分享给大家供大家参考.具体分析如下: 这里展示一个例子,供学习使用: private void button_测试Queue结合多线程_Click(object sender, EventArgs e) { Console.WriteLine("初始化队列"); queue = new Queue<string>(); string[] cars = new string[]{"宝马","奔驰&quo

  • C#线程队列用法实例分析

    本文实例讲述了C#线程队列用法.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ThreadPro { class Program { static Mutex gM1; static Mutex gM2; const int ITERS = 100; static AutoResetEvent Event1

  • c#队列Queue学习示例分享

    集合>队列Queue>创建队列 System.Collections.Queue类提供了四种重载构造函数. 复制代码 代码如下: using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections; namespace ConsoleApplication1{    class Program    {        static void Main(string[] arg

  • C#内置队列类Queue用法实例

    本文实例讲述了C#内置队列类Queue用法.分享给大家供大家参考.具体分析如下: 这里详细演示了C#内置的队列如何进行添加,移除等功能. using System; using System.Collections.Generic; class Example { public static void Main() { Queue<string> numbers = new Queue<string>(); numbers.Enqueue("one"); num

  • Java数据结构之队列的简单定义与使用方法

    本文实例讲述了Java数据结构之队列的简单定义与使用方法.分享给大家供大家参考,具体如下: 一.概述: 1.说明: 队列的原则时先进先出,就像生活中排队取票一样,谁排在前面谁先得到 2.有五个属性: 1)数组元素 2)最大空间 3)长度 4)队头 5)队尾 3.示例图: 二.代码实现 /** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com.java.stack * @类名 Queue * @author chenlin * @version 1.0 * @S

  • Python实现栈和队列的简单操作方法示例

    本文实例讲述了Python实现栈和队列的简单操作方法.分享给大家供大家参考,具体如下: 先简单的了解一下数据结构里面的栈和堆: 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列是按顺序的 对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求.当

  • C#队列的简单使用

    队列的特性很简答,就是先进先出,一般利用数组来实现. 实现队列自然要实现几个函数:入队,出队,判断队满,判断队空,获得队头,队尾. 实现队列的关键在于队头指针和队尾指针的设置: 假设初始状态下,队头指针为0,队尾指针为-1,那么两个指针指的位置分别就是队头与队尾.当队尾的下一个是队头时队空,当队尾的下下个是队头时队满. 假设初始状态下,队头队尾指针都为0,那么队尾指针指的是队尾,而队头指针的下一个位置才是队头.当两指针相等时队空,当队尾指针的下一个是队头时队满. 如果我们画个图就会发现,不管怎么

  • Python collections中的双向队列deque简单介绍详解

    前言 在python神书<Python+Cookbook>中有这么一段话:在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元素的时间复杂度为 O(N). 于是就想验证下. 简单使用 基本代码 from collections import deque q = deque(maxlen=4)#有固定长度的双向队列 qq = deque() #无固定长度 print(dir(q))#看看有哪些可用方法或属性 结果: ['__add__', '__bool__', '__

  • Java消息队列的简单实现代码

    今天看到我们的招聘信息有对消息队列有要求,然后就思索了一翻,网上一搜一大堆. 我可以举个小例子先说明应用场景 假设你的服务器每分钟的处理量为200个,但客户端再峰值的时候可能一分钟会发1000个消息给你,这时候你就可以把他做成队列,然后按正常有序的处理,先进后出(LIFO),先进先出(FIFO)可根据自己的情况进行定夺 stack  先进后出(LIFO)--------Java 对应的类 Stack 队列 先进先出(FIFO)--------java对应的类Queue 这两种都可用Linkedl

  • Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    本文实例讲述了Python 进程操作之进程间通过队列共享数据,队列Queue.分享给大家供大家参考,具体如下: 队列中的数据是放在内存中的,可以通过分布式缓存redis优化队列. demo.py(进程通过队列共享数据): import multiprocessing def download_from_web(q): """下载数据""" # 模拟从网上下载的数据 data = [11, 22, 33, 44] # 向队列中写入数据 for te

  • AJAX请求队列实现

    AJAX在使用的过程中会遇到一个问题,当用户短时间内执行了多个异步请求的时候,如果前一个请求没完成,将会被取消执行最新的一个请求,大多数情况下,不会有什么影响,例如请求了一个新的列表,旧的请求也就没什么必要了 ,但是,当我们的WEB程序需要同时异步调用多个请求,或者需要用户请求的是不同类型的数据,都需要执行完成的时候就出现问题 了,于是,将用户的请求记录下来,并按顺序执行. 不同的浏览器,允许同时执行的线程不同,通常IE允许两个线程,于是,当同时执行的异步请求超过两个时,就会变成只执行最新的两个

  • 队列在编程中的实际应用(php)

    一:队列的概念.数据结构 队列(Queue)是运算受到限制的一种线性表.只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空表. 假设有个队列Q=(a1,a2,-,an),则a1为队头元素,an为队尾元素.元素入队的次序为a1,a2,-,an,而出队的次序为a1,a2,-,an.可见队列的操作是按照先进先出的原则进行的. 其他详细的介绍请在网上搜索很多资料. 二:PHP的队列 在PHP中队列以数组的形

  • 进程间通信之深入消息队列的详解

    最近在Hi3515上调试Qt与DVR程序,发现他们之间使用消息队列通信的,闲暇之余,就总结了一下消息队列,呵呵,自认为通俗易懂,同时,在应用中也发现了消息队列的强大之处. 关于线程的管理(互斥量和条件变量)见:Linux线程管理必备:解析互斥量与条件变量的详解 一.消息队列的特点 1.消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.    2.消息队列允许一个或多个进程向它写入与读取消息.    3.管道和命名管道都是通信数据都是先进先出的原则.    4.消息队列可以

  • 浅析Laravel5中队列的配置及使用

    前言 队列常常用于两种场景,一种是高并发的情况,一种是耗时的操作,可以将任务放到队列中去,消费者从队列取任务执行,当然还有失败的情况如何处理,以及延迟,重试,更复杂的情况还有优先级的实现. 在Laravel 5中使用队列非常简单,并且失败处理,延迟,重试的方法都已经实现,下面简单尝试了一下Laravel的队列服务. Laravel默认支持以下几种队列服务:sync, database, beanstalkd, sqs, redis,本例使用redis作为队列服务,需先配置好Redis服务. 1.

随机推荐