前言
在开发之中我们基本上不会自己再去写队列了,而是去使用现在成熟的队列框架。
但是我们也应该知道如何去自己实现。
整理基本的数据结构,大概81篇,为c# 文。
正文
队列的一些特性:
1、 队列是一个有序列表,可以用数组和链表来实现;
2、 遵守先入先出原则;
那么一个队列需要什么?
下面几个参数是需要的:
1、 一个数组;
2、 队尾标志;
3、 队首标志;
4、 数组大小;
函数:
1、 判断是否为空;
2、 判断是否满了;
3、 向队列里添加元素;
4、 向队列弹出元素;
5、 展示队首元素;
code 实现
public class ArrayQueue
{
	private int[] arr;
	private int MaxLen;
	private int front=-1;
	private int rear=-1;
	public ArrayQueue(int len)
	{
		this.MaxLen = len;
		this.arr = new int[len];
	}
	//是否队列满了
	public bool isFull()
	{
		return rear == MaxLen - 1;
	}
	//是否队列为空
	public bool isEmply()
	{
		return rear == front;
	}
	//添加队列元素
	public bool addEle(int ele)
	{
		if (isFull())
		{
			return false;
		}
		rear++;
		arr[rear] = ele;
		return true;
	}
	//显示队列中全部数据
	public void showQueue()
	{
		for (int i=front+1;i<=rear;i++)
		{
			Console.WriteLine(arr[i]);
		}
	}
	//将队首弹出
	public int pop() {
		if (isEmply())
		{
			throw new Exception();
		}
		return arr[++front];
	}
	//显示队首
	public int headQueue() {
		if (isEmply())
		{
			throw new Exception();
		}
		return arr[front+1];
	}
}
出现的问题,或者说不足之处:
这个队列是一次性的,因为front 最终会到达rear,这样就一直显示队列满了。
那么这个时候就需要环形数组。
环形数组
环形数组设置front 和rear 全部为0。
看下什么时候队列是满的:

什么时候队列是空的:

有了这两个就很好改了。
环形数组代码
public class CircleQueue
{
	private int[] arr;
	private int MaxLen;
	private int front;
	private int rear;
	public CircleQueue(int len)
	{
		this.MaxLen = len;
		this.arr = new int[len];
	}
	//是否队列满了
	public bool isFull()
	{
		return rear+1%MaxLen== front;
	}
	//是否队列为空
	public bool isEmply()
	{
		return rear == front;
	}
	//添加队列元素
	public bool addEle(int ele)
	{
		if (isFull())
		{
			return false;
		}
		arr[rear] = ele;
		rear = rear + 1 % MaxLen;
		return true;
	}
	//显示队列中全部数据
	public void showQueue()
	{
		for (int i = front + 1; i <= rear; i++)
		{
			Console.WriteLine(arr[i]);
		}
	}
	//将队首弹出
	public int pop()
	{
		if (isEmply())
		{
			throw new Exception();
		}
		var result=arr[front];
		front = front + 1 % front;
		return result;
	}
	//显示队首
	public int headQueue()
	{
		if (isEmply())
		{
			throw new Exception();
		}
		return arr[front];
	}
}
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: