使用C#实现顺序队列
队列(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()
下面给出一个实现顺序栈的源代码
- 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());
- }
- }
- }
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#实现顺序队列的更多相关文章
- 顺序队列C/C++实现
#include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 顺序队列之C++实现
下面介绍下用C++实现的顺序队列,在VC6下调试通过. 1.文件组织形式 2.sq.h顺序队列类的说明 #ifndef _SQ_H_ #define _SQ_H_ typedef int dataTy ...
- Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...
- java 实现简单的顺序队列
package com.my; import java.util.Arrays; /** * 顺序队列 * @author wanjn * */ public class ArrayQueue { p ...
- C语言顺序队列
顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...
- java代码实现顺序队列
java实现顺序队列 package xianxinTable; import java.util.ArrayList; import java.util.Iterator; import com.s ...
- 数据结构 - 顺序队列的实行(C语言)
数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...
- 数据结构之顺序队列(C实现)
一.队列是什么 队列是一种可以实现“先进先出”的存储结构. 队列通常可以分为两种类型: 一.顺序队列,采用顺序存储,当长度确定时使用. 顺序队列又有两种情况: ①使用数组存储队列的称为静态顺序队列. ...
- 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
随机推荐
- CallContext和多线程
前一段时间正好要在某个网页程序上开一个多线程调用多个组件的尝试,这些组件是有其他团队开发的(如:印度/俄罗斯),所以修改它们的代码看起来是不太现实的,但是,令人恼火的是他们的代码中大量的用到了AppC ...
- 位图像素的颜色 携程编程大赛hdu
位图像素的颜色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Sub ...
- CSDN 夏令营课程 项目分析
主题如以下: 正确改动后的程序: #include <iostream.h> //using namespace std; class BASE { char c; public: BAS ...
- Directx11学习笔记【十】 画一个简单的三角形
本篇笔记要实现的是在屏幕上渲染出一个三角形,重点要学习的是渲染一个几何体的流程方式. 为了渲染几何图形,需要一个顶点缓存和一个描述顶点布局的输入层,还有着色器(主要是顶点着色器和像素着色器),下面来看 ...
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了 ...
- 调整CentOS的文字登陆界面的分辨率
通过文字界面登陆到系统,切换到root权限. 用vi打开 /boot/grub/menu.lst 文件 ,因为menu.lst是grub.conf文件的快捷方式,终于打开的还是grub.conf文 ...
- Win7 补丁装不上怎么办?
检查系统盘文件系统是否出错: 打开管理员命令行程序(Win+R,输入 cmd 确认) 如果系统盘是 C 盘,命令行窗口输入 chkdsk C: /f 对提示输入’y’ 重启等待 系统文件检查: 打开管 ...
- Sonar Qube QA
配置:1.配置环境变量 SONAR_RUNNER_HOME2.配置path :增加%SONAR_RUNNER_HOME%\bin3.在自己的本地项目的根目录下创建 sonar-project.pro ...
- ORACLE 创建表空间、用户、授权
1.创建表空间 create tablespace TEST logging datafile 'e:\app\administrator\oradata\orcl\TEST.dbf' size 1 ...
- SQL Server 2008 R2 性能计数器详细列表(四)
原文:SQL Server 2008 R2 性能计数器详细列表(四) SQL Server Latches 对象: 监视称为闩锁的内部 SQL Server 资源锁.通过监视闩锁来确定用户活动和资源使 ...