您的位置:首页 > 理论基础 > 数据结构算法

重新整理数据结构与算法——数组模拟队列和环形队列[三]

2020-06-10 14:21 344 查看

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

前言

在开发之中我们基本上不会自己再去写队列了,而是去使用现在成熟的队列框架。

但是我们也应该知道如何去自己实现。

整理基本的数据结构,大概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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐