资源简介
使用C#使用循环队列,压缩包里包含源代码以及测试类。
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CircleQueue
{
///
/// 循环队列
/// binnerLee
/// 2015年1月4日
///
///
public class MyCircleQueue
{
///
/// 队列数组
///
private T[] _queue;
///
/// 队首索引
///
private int _front;
///
/// 队尾索引
///
private int _rear;
///
/// 队列的内存大小,但实际可用大小为_capacity-1
///
private int _capacity;
public MyCircleQueue(int queueSize)
{
if (queueSize < 1)
throw new IndexOutOfRangeException(“传入的队列长度不能小于1。“);
//设置队列容量
_capacity = queueSize;
//创建队列数组
_queue = new T[queueSize];
//初始化队首和队尾索引
_front = _rear = 0;
}
///
/// 添加一个元素
///
///
public void Push(T item)
{
//队列已满
if (GetNextRearIndex() == _front)
{
//扩大数组
T[] newQueue = new T[2 * _capacity];
if (newQueue == null)
throw new ArgumentOutOfRangeException(“数据容量过大,超出系统内存大小。“);
//队列索引尚未回绕
if (_front == 0)
{
//将旧队列数组数据转移到新队列数组中
Array.Copy(_queue newQueue _capacity);
}
else
{
//如果队列回绕,刚需拷贝再次,
//第一次将队首至旧队列数组最大长度的数据拷贝到新队列数组中
Array.Copy(_queue _front newQueue _front _capacity - _rear - 1);
//第二次将旧队列数组起始位置至队尾的数据拷贝到新队列数组中
Array.Copy(_queue 0 newQueue _capacity _rear + 1);
//将队尾索引改为新队列数组的索引
_rear = _capacity + 1;
}
_queue = newQueue;
_capacity *= 2;
}
//累加队尾索引,并添加当前项
_rear = GetNextRearIndex();
_queue[_rear] = item;
}
///
/// 获取队首元素
///
///
public T FrontItem()
{
if (IsEmpty())
throw new ArgumentOutOfRangeException(“队列为空。“);
return _queue[GetNextFrontIndex()];
}
///
/// 获取队尾元素
///
///
public T RearItem()
{
if (IsEmpty())
throw new ArgumentOutOfRangeException(“队列为空。“);
return _queue[_rear];
}
///
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6656 2015-01-04 17:27 CircleQueue\CircleQueue\bin\Debug\CircleQueue.exe
文件 17920 2015-01-04 17:27 CircleQueue\CircleQueue\bin\Debug\CircleQueue.pdb
文件 11600 2015-01-04 17:25 CircleQueue\CircleQueue\bin\Debug\CircleQueue.vshost.exe
文件 490 2010-03-17 22:39 CircleQueue\CircleQueue\bin\Debug\CircleQueue.vshost.exe.manifest
文件 2487 2015-01-04 16:48 CircleQueue\CircleQueue\CircleQueue.csproj
文件 4641 2015-01-04 17:56 CircleQueue\CircleQueue\MyCircleQueue.cs
文件 252 2015-01-04 17:25 CircleQueue\CircleQueue\obj\x86\Debug\CircleQueue.csproj.FileListAbsolute.txt
文件 6656 2015-01-04 17:27 CircleQueue\CircleQueue\obj\x86\Debug\CircleQueue.exe
文件 17920 2015-01-04 17:27 CircleQueue\CircleQueue\obj\x86\Debug\CircleQueue.pdb
文件 5847 2015-01-04 17:27 CircleQueue\CircleQueue\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache
文件 1617 2015-01-04 17:56 CircleQueue\CircleQueue\Program.cs
文件 1372 2015-01-04 15:00 CircleQueue\CircleQueue\Properties\AssemblyInfo.cs
文件 875 2015-01-04 15:00 CircleQueue\CircleQueue.sln
..A..H. 10752 2015-01-04 15:00 CircleQueue\CircleQueue.suo
目录 0 2015-01-04 15:00 CircleQueue\CircleQueue\obj\x86\Debug\TempPE
目录 0 2015-01-04 17:27 CircleQueue\CircleQueue\obj\x86\Debug
目录 0 2015-01-04 16:48 CircleQueue\CircleQueue\bin\Debug
目录 0 2015-01-04 15:00 CircleQueue\CircleQueue\obj\x86
目录 0 2015-01-04 15:00 CircleQueue\CircleQueue\bin
目录 0 2015-01-04 15:00 CircleQueue\CircleQueue\obj
目录 0 2015-01-04 15:00 CircleQueue\CircleQueue\Properties
目录 0 2015-01-04 15:04 CircleQueue\CircleQueue
目录 0 2015-01-04 15:00 CircleQueue
----------- --------- ---------- ----- ----
89085 23
- 上一篇:asp.net 三层架构,经典源码
- 下一篇:.net(C#)用户登陆自定义控件
评论
共有 条评论