1. BCL中的队列
BCL中实现了Queue,有队列的操作。
1.1 Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class Program
{
static void Main(string[] args)
{
1.使用BCL中的队列
Queue<int> queue = new Queue<int>();
//入队(添加数据)
queue.Enqueue(3);//入队(放在队尾)
queue.Enqueue(4);//入队(放在队尾)
queue.Enqueue(5);//入队(放在队尾)
queue.Enqueue(6);//入队(放在队尾)
queue.Enqueue(7);//入队(放在队尾)
Console.WriteLine("添加了3 4 5 6 7后队列大小为:" + queue.Count);
//出队(取得队首数据并删除)
int i = queue.Dequeue();
Console.WriteLine("取得队首元素为:" + i);
Console.WriteLine("出队后队列大小为:" + queue.Count);
//取得队首元素但不删除
int j = queue.Peek();
Console.WriteLine("Peek后取得的元素:" + j);
Console.WriteLine("Peek后对列大小:" + queue.Count);
queue.Clear();
Console.WriteLine("Clear后队列大小:" + queue.Count);
Console.ReadKey();
}
}
}
2. 自己定义实现顺序队列
定义了一个IQueue接口,用于队列的方法属性的定义,再在SeqQueue中实现。
2.1 IQueue.cs(接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
interface IQueue<T>
{
int Count { get; }
int GetLength();
bool IsEmpty();
void Clear();
void Enqueue(T item);
T Dequeue();
T Peek();
}
}
2.2 SeqQueue.cs(实现接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class SeqQueue<T> : IQueue<T>
{
private int count;//对列中元素个数
private int front;//对头(等于队首元素索引-1)
private int rear;//队尾(等于队尾元素索引值)
private T[] data;
public SeqQueue(int size)
{
data = new T[size];
count = 0;
front = -1;
rear = -1;
}
public SeqQueue():this(10)
{
}
/// <summary>
/// 对列中元素个数
/// </summary>
public int Count
{
get
{
return count;
}
}
/// <summary>
/// 清空对列
/// </summary>
public void Clear()
{
count = 0;
front = rear = -1;
}
/// <summary>
/// 出队(取得队首元素并删除
/// </summary>
/// <returns></returns>
public T Dequeue()
{
if(count>0)
{
T temp = data[front + 1];
front++;
count--;
return temp;
}
else
{
Console.WriteLine("队列为空,无法取得队首元素");
return default(T);
}
}
/// <summary>
/// 入队
/// </summary>
/// <param name="item"></param>
public void Enqueue(T item)
{
if (count == data.Length)
{
Console.WriteLine("对列已满");
}
else
{
if (rear == data.Length - 1)
{
data[0] = item;
rear = 0;
}
else
{
data[rear + 1] = item;
rear++;
}
count++;
}
}
/// <summary>
/// 获得对列长度
/// </summary>
/// <returns></returns>
public int GetLength()
{
return count;
}
/// <summary>
/// 对列是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
return count == 0;
}
/// <summary>
/// 取得队列队头元素,但不删除
/// </summary>
/// <returns></returns>
public T Peek()
{
return data[front + 1];
}
}
}
2.3 Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _403_队列
{
class Program
{
static void Main(string[] args)
{//2.使用自己定义的顺序栈
SeqQueue<int> queue = new SeqQueue<int>();
//入队(添加数据)
queue.Enqueue(3);//入队(放在队尾)
queue.Enqueue(4);//入队(放在队尾)
queue.Enqueue(5);//入队(放在队尾)
queue.Enqueue(6);//入队(放在队尾)
queue.Enqueue(7);//入队(放在队尾)
Console.WriteLine("添加了3 4 5 6 7后队列大小为:" + queue.Count);
//出队(取得队首数据并删除)
int i = queue.Dequeue();
Console.WriteLine("取得队首元素为:" + i);
Console.WriteLine("出队后队列大小为:" + queue.Count);
//取得队首元素但不删除
int j = queue.Peek();
Console.WriteLine("Peek后取得的元素:" + j);
Console.WriteLine("Peek后对列大小:" + queue.Count);
queue.Clear();
Console.WriteLine("Clear后队列大小:" + queue.Count);
Console.ReadKey();
}
}
}