队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的线性表。把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front)。当对列中没有数据元素时称为空对列(Empty Queue)。

队列通常记为:Q= (a1,a2,…,an),a1为队头元素,an为队尾元素。元素按照a1,a2,…,an的次序依次入队,出队的次序与入队相同,即a1第一个出队,an最后一个出队。所以,对列的操作是按照先进先出(First In First Out)或后进后出( Last In Last Out)的原则进行的,因此,队列又称为FIFO表或LILO表。

队列的常用操作有:

1、构造一个空队列:InitQueue()//在C#中可以使用构造函数来实现

2、清空队列:ClearQueue()

3、判断队列是否为空:IsEmpty()

4、判断队列是否已满:IsFull()

5、求队列长度:QueueLength()

6、入队操作:In()

7、出队操作:Out()

8、得到队头元素:GetHead()

下面给出一个实现顺序栈的源代码

  1. using System;
  2. class Queue
  3. {
  4. object[] data;  //数据元素
  5. int maxsize;    //最大容量
  6. int front;      //指向队头
  7. int rear;       //指向队尾
  8. //初始化队列
  9. public Queue(int size)
  10. {
  11. this.maxsize = size;
  12. data = new object[size];
  13. front = rear = -1;
  14. }
  15. //最大容量属性
  16. public int MaxSize
  17. {
  18. get
  19. {
  20. return this.maxsize;
  21. }
  22. set
  23. {
  24. this.maxsize = value;
  25. }
  26. }
  27. //队尾属性
  28. public int Rear
  29. {
  30. get
  31. {
  32. return this.rear;
  33. }
  34. }
  35. //队头属性
  36. public int Front
  37. {
  38. get
  39. {
  40. return this.front;
  41. }
  42. }
  43. //数据属性
  44. public object this[int index]
  45. {
  46. get
  47. {
  48. return data[index];
  49. }
  50. }
  51. //获得队列的长度
  52. public int GetQueueLength()
  53. {
  54. return rear - front;
  55. }
  56. //判断队列是否满
  57. public bool IsFull()
  58. {
  59. if (GetQueueLength() == maxsize)
  60. return true;
  61. else
  62. return false;
  63. }
  64. //判断队列是否为空
  65. public bool IsEmpty()
  66. {
  67. if (rear == front)
  68. return true;
  69. else
  70. return false;
  71. }
  72. //清空队列
  73. public void ClearQueue()
  74. {
  75. rear = front = -1;
  76. }
  77. //入队
  78. public void In(object e)
  79. {
  80. if (IsFull())
  81. {
  82. Console.WriteLine("队列已满!");
  83. return;
  84. }
  85. data[++rear] = e;
  86. }
  87. //出队
  88. public object Out()
  89. {
  90. if (IsEmpty())
  91. {
  92. Console.WriteLine("队列为空!");
  93. return null;
  94. }
  95. if (rear - front > 0)
  96. {
  97. object tmp = data[++front];
  98. return tmp;
  99. }
  100. else
  101. {
  102. Console.WriteLine("全出队了!");
  103. ClearQueue();
  104. return null;
  105. }
  106. }
  107. //获得队头元素
  108. public object GetHead()
  109. {
  110. if (IsEmpty())
  111. {
  112. Console.WriteLine("队列为空!");
  113. return null;
  114. }
  115. return data[front + 1];
  116. }
  117. }
  118. class Test
  119. {
  120. static void Main()
  121. {
  122. Queue q = new Queue(5);
  123. int rdNum;
  124. Random rd = new Random();
  125. while (!q.IsFull())
  126. {
  127. rdNum = rd.Next(10, 100);
  128. q.In(rdNum);
  129. Console.WriteLine("{0}入队,队列元素个数:{1}", rdNum, q.GetQueueLength());
  130. }
  131. Console.WriteLine("***************************");
  132. while (!q.IsEmpty())
  133. {
  134. Console.WriteLine("{0}出队,队列元素个数:{1}", q.Out(), q.GetQueueLength());
  135. }
  136. }
  137. }

using System;
class Queue
{
object[] data; //数据元素
int maxsize; //最大容量
int front; //指向队头
int rear; //指向队尾

//初始化队列
public Queue(int size)
{

this.maxsize = size;
data = new object[size];
front = rear = -1;
}

//最大容量属性
public int MaxSize
{
get
{
return this.maxsize;
}
set
{
this.maxsize = value;
}
}

//队尾属性
public int Rear
{
get
{
return this.rear;
}
}

//队头属性
public int Front
{
get
{
return this.front;
}
}

//数据属性
public object this[int index]
{
get
{
return data[index];
}
}

//获得队列的长度
public int GetQueueLength()
{
return rear - front;
}

//判断队列是否满
public bool IsFull()
{
if (GetQueueLength() == maxsize)
return true;
else
return false;
}

//判断队列是否为空
public bool IsEmpty()
{
if (rear == front)
return true;
else
return false;
}

//清空队列
public void ClearQueue()
{
rear = front = -1;
}

//入队
public void In(object e)
{

if (IsFull())
{
Console.WriteLine("队列已满!");
return;
}
data[++rear] = e;
}

//出队
public object Out()
{

if (IsEmpty())
{
Console.WriteLine("队列为空!");
return null;
}

if (rear - front > 0)
{
object tmp = data[++front];
return tmp;
}
else
{
Console.WriteLine("全出队了!");
ClearQueue();
return null;
}
}

//获得队头元素
public object GetHead()
{

if (IsEmpty())
{
Console.WriteLine("队列为空!");
return null;
}
return data[front + 1];
}

}

class Test
{

static void Main()
{
Queue q = new Queue(5);
int rdNum;
Random rd = new Random();
while (!q.IsFull())
{
rdNum = rd.Next(10, 100);
q.In(rdNum);
Console.WriteLine("{0}入队,队列元素个数:{1}", rdNum, q.GetQueueLength());
}
Console.WriteLine("***************************");
while (!q.IsEmpty())
{
Console.WriteLine("{0}出队,队列元素个数:{1}", q.Out(), q.GetQueueLength());
}
}
}

运行结果:

23入队,队列元素个数:1

85入队,队列元素个数:2

28入队,队列元素个数:3

94入队,队列元素个数:4

55入队,队列元素个数:5

***************************

23出队,队列元素个数:4

85出队,队列元素个数:3

28出队,队列元素个数:2

94出队,队列元素个数:1

55出队,队列元素个数:0

请按任意键继续. . .

使用C#实现顺序队列的更多相关文章

  1. 顺序队列C/C++实现

    #include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...

  2. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  3. 顺序队列之C++实现

    下面介绍下用C++实现的顺序队列,在VC6下调试通过. 1.文件组织形式 2.sq.h顺序队列类的说明 #ifndef _SQ_H_ #define _SQ_H_ typedef int dataTy ...

  4. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法

    前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...

  5. java 实现简单的顺序队列

    package com.my; import java.util.Arrays; /** * 顺序队列 * @author wanjn * */ public class ArrayQueue { p ...

  6. C语言顺序队列

    顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...

  7. java代码实现顺序队列

    java实现顺序队列 package xianxinTable; import java.util.ArrayList; import java.util.Iterator; import com.s ...

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

    数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...

  9. 数据结构之顺序队列(C实现)

    一.队列是什么 队列是一种可以实现“先进先出”的存储结构. 队列通常可以分为两种类型: 一.顺序队列,采用顺序存储,当长度确定时使用. 顺序队列又有两种情况: ①使用数组存储队列的称为静态顺序队列. ...

  10. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

随机推荐

  1. BP神经网络的基本原理

    2.1 BP神经网络基本原理 BP网络模型处理信息的基本原理是:输入信号Xi通过中间节点(隐层点)作用于输出节点.经过非线形变换,产生输出信号Yk,网络训练的每一个样本包含输入向量X和期望输出量t,网 ...

  2. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法

    假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...

  3. javascript中的三角学

    三角学主要研究三角形和它们的边角关系,包含一个90度角的三角形被称为直角三角形.在这里主要研究直角三角形相关的知识. 1. 角度和弧度 360(角度) = 2*Math.PI(弧度) degrees ...

  4. Java NIO 系列教程(转)

    原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞 ...

  5. 【新秀疯狂UML系列】——面向对象的技术

    从软质工作开始,我们来到与面向对象的接触,接下来的学习材料似乎已经提到了面向对象,在与她的朋友去一个.所以,我们必须知道她多一点点. 一.何为面向对象? 面向对象(Object Oriented).是 ...

  6. MINA2 源代码学习--源代码结构梳理

    一.mina总体框架与案例: 1.总体结构图: 简述:以上是一张来自网上比較经典的图,总体上揭示了mina的结构,当中IoService包括clientIoConnector和服务端IoAccepto ...

  7. 设计模式 Template Method模式 显示程序猿的一天

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清 ...

  8. 设计模式--简单工厂VS工厂VS抽象工厂

    前几天我一直在准备大学毕业生,始终绑起来,如今,终于有时间去学习设计模式.我们研究今天的话题是植物三口之家的设计模式的控制--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单 ...

  9. ext3文件系统反删除利器ext3grep应用实战

    推荐:10年技术力作:<高性能Linuxserver构建实战Ⅱ>全网发行,附试读章节和全书实例源代码下载! 一."rm –rf"带来的困惑 国外一份非常著名的Linux ...

  10. SAP ABAP第一,两,三代出口型BADI实现 解释的概念

    BADI这是第三代用户出口型.让我们来看看如何实现的细节. 一个,用户出口的类型 1,第一代 sap提供了一个空的子程序代码.在这个过程分,用户可以添加自己的代码.为了控制自己的需求.这样的改进是需要 ...