内容提交

This commit is contained in:
MYP
2020-10-09 12:39:40 +08:00
parent 24df01c2ab
commit 04c93d86d9
2 changed files with 1093 additions and 572 deletions

View File

@@ -1,572 +0,0 @@
# Task04<30><34><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>2<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>ȥʳ<EFBFBD>ô򷹵ȶ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ŷӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD>򷹵<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷӵ<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>˭<EFBFBD><EFBFBD><EFBFBD>ŶӾ<EFBFBD>Ϊ˭<EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
![](https://img-blog.csdnimg.cn/20191223190948974.png)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD>еľ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ȷŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ȷŵ<EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD> Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>ܡ<EFBFBD><DCA1><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
## 1. <20><><EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**1.1 <20><><EFBFBD>еĶ<D0B5><C4B6><EFBFBD>**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><EFBFBD>ȳ<EFBFBD><EFBFBD><EFBFBD>First In First Out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
<EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>`a0,a1,...,an`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>
![˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](https://img-blog.csdnimg.cn/20191223191501199.png)
![<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](https://img-blog.csdnimg.cn/20191223191548730.png)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD>ĶԱ<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD>ݹ鲿<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
**1.2 <20><><EFBFBD>еIJ<D0B5><C4B2><EFBFBD>**
- <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
- <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ء<EFBFBD>
- <20>Ƿ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3>ж϶<D0B6><CFB6><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ء<EFBFBD>
- <20>õ<EFBFBD><C3B5>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD><EFBFBD><EFBFBD>
- <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ء<EFBFBD>
- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ԫ<EFBFBD>ء<EFBFBD>
![<EFBFBD><EFBFBD><EFBFBD>нӿ<EFBFBD>](https://img-blog.csdnimg.cn/20191223191753857.png)
```c
using System;
namespace LinearStruct
{
/// <summary>
/// <20><><EFBFBD>еij<D0B5><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></typeparam>
public interface IQueue<T> where T : IComparable<T>
{
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
int Length { get; }
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
T QueueFront { get; }
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data">Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD>Ԫ<EFBFBD><D4AA></param>
void EnQueue(T data);
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>س<EFBFBD><D8B3><EFBFBD>
/// </summary>
void DeQueue();
/// <summary>
/// <20>ж϶<D0B6><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD>false,<2C><><EFBFBD>򷵻<EFBFBD>true.</returns>
bool IsEmpty();
/// <summary>
/// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
void Clear();
}
}
```
## 2. <20><><EFBFBD>еĴ洢<C4B4><E6B4A2>ʵ<EFBFBD><CAB5>
**2.1 ˳<><CBB3><EFBFBD>**
<u>˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD></u>
˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>Sequence Queue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵĶ<D6B5><C4B6>С<EFBFBD>
ʵ<EFBFBD>֣<EFBFBD>
![˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](https://img-blog.csdnimg.cn/20191223192315765.png)
```c
using System;
namespace LinearStruct
{
/// <summary>
/// <20><>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ṹʵ<E1B9B9>ֵĶ<D6B5><C4B6><EFBFBD>--˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T">˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></typeparam>
public class SeqQueue<T> : IQueue<T> where T : IComparable<T>
{
private readonly SeqList<T> _lst;
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>SeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="max">SeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD></param>
public SeqQueue(int max)
{
if (max <= 0)
throw new ArgumentOutOfRangeException();
_lst = new SeqList<T>(max);
}
/// <summary>
/// <20><>ȡSeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int MaxSize
{
get { return _lst.MaxSize; }
}
/// <summary>
/// <20><>ȡSeqQueue<75><65>ʵ<EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int Length
{
get { return _lst.Length; }
}
/// <summary>
/// <20><>ȡSeqQueue<75>еĶ<D0B5><C4B6><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public T QueueFront
{
get
{
if (_lst.IsEmpty())
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>,<2C><><EFBFBD>ܵõ<DCB5><C3B5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>.");
return _lst[0];
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data">Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD>Ԫ<EFBFBD><D4AA></param>
public void EnQueue(T data)
{
if (_lst.Length == _lst.MaxSize)
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.");
_lst.Insert(_lst.Length, data);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>س<EFBFBD><D8B3><EFBFBD>
/// </summary>
public void DeQueue()
{
if (_lst.IsEmpty())
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>,<2C><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>.");
_lst.Remove(0);
}
/// <summary>
/// <20>ж϶<D0B6><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD>false,<2C><><EFBFBD>򷵻<EFBFBD>true.</returns>
public bool IsEmpty()
{
return _lst.IsEmpty();
}
/// <summary>
/// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public void Clear()
{
_lst.Clear();
}
}
}
```
<u>ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></u>
ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Circular Sequence Queue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>ķ<EFBFBD>ʽʵ<CABD>ֵĶ<D6B5><C4B6>С<EFBFBD>
![ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ](https://img-blog.csdnimg.cn/20191223192517344.png)
ʵ<EFBFBD>֣<EFBFBD>
![ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>](https://img-blog.csdnimg.cn/20191223192722855.png)
```c
using System;
namespace LinearStruct
{
/// <summary>
/// <20><>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ṹʵ<E1B9B9>ֵĶ<D6B5><C4B6><EFBFBD>--ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T">ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></typeparam>
public class CSeqQueue<T> : IQueue<T> where T : IComparable<T>
{
private int _pFront;
private int _pRear;
private readonly T[] _dataset;
/// <summary>
/// <20><>ȡCSeqQueue<75><65>ʵ<EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int Length { get; private set; }
/// <summary>
/// <20><>ȡCSeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int MaxSize { get; }
/// <summary>
/// <20><>ȡCSeqQueue<75>еĶ<D0B5><C4B6><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public T QueueFront
{
get
{
if (Length == 0)
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ղ<EFBFBD><EFBFBD>ܵõ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>.");
return _dataset[_pFront];
}
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>CSeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="max">CSeqQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD></param>
public CSeqQueue(int max)
{
if (max <= 0)
throw new ArgumentOutOfRangeException();
MaxSize = max;
Length = 0;
_dataset = new T[MaxSize];
_pFront = 0;
_pRear = 0;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data">Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD>Ԫ<EFBFBD><D4AA></param>
public void EnQueue(T data)
{
if (Length == MaxSize)
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.");
_dataset[_pRear] = data;
_pRear = (_pRear + 1)%MaxSize;
Length++;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>س<EFBFBD><D8B3><EFBFBD>
/// </summary>
public void DeQueue()
{
if (Length == 0)
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>,<2C><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>.");
_pFront = (_pFront + 1)%MaxSize;
Length--;
}
/// <summary>
/// <20>ж϶<D0B6><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD>false,<2C><><EFBFBD>򷵻<EFBFBD>true.</returns>
public bool IsEmpty()
{
return Length == 0;
}
/// <summary>
/// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public void Clear()
{
_pFront = 0;
_pRear = 0;
Length = 0;
}
}
}
```
**2.2 <20><>ʽ<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>**
<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵĶ<EFBFBD><EFBFBD>С<EFBFBD>
ʵ<EFBFBD>֣<EFBFBD>
![<EFBFBD><EFBFBD><EFBFBD><EFBFBD>](https://img-blog.csdnimg.cn/20191223192940470.png)
```c
using System;
namespace LinearStruct
{
/// <summary>
/// <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ṹʵ<E1B9B9>ֵĶ<D6B5><C4B6><EFBFBD>
/// </summary>
/// <typeparam name="T"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></typeparam>
public class LinkQueue<T> : IQueue<T> where T : IComparable<T>
{
private readonly SLinkList<T> _lst;
/// <summary>
/// <20><>ȡLinkQueue<75><65>ʵ<EFBFBD>ʰ<EFBFBD><CAB0><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
/// </summary>
public int Length
{
get { return _lst.Length; }
}
/// <summary>
/// <20><>ȡLinkQueue<75>еĶ<D0B5><C4B6><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public T QueueFront
{
get
{
if (_lst.IsEmpty())
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>.");
return _lst[0];
}
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>LinkQueue<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
public LinkQueue()
{
_lst = new SLinkList<T>();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="data">Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD>Ԫ<EFBFBD><D4AA></param>
public void EnQueue(T data)
{
_lst.InsertAtRear(data);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>س<EFBFBD><D8B3><EFBFBD>
/// </summary>
public void DeQueue()
{
if (_lst.IsEmpty())
throw new Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>,<2C><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>.");
_lst.Remove(0);
}
/// <summary>
/// <20>ж϶<D0B6><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD>false,<2C><><EFBFBD>򷵻<EFBFBD>true.</returns>
public bool IsEmpty()
{
return _lst.IsEmpty();
}
/// <summary>
/// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public void Clear()
{
_lst.Clear();
}
}
}
```
## 3. <20><>ϰ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD>
**1. ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**
<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>Ϊ`C#`<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>еĽӿ<EFBFBD>
```c
using LinearStruct;
namespace BankQueue
{
public interface IBankQueue : IQueue<int>
{
/// <summary>
/// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
int GetCallnumber();
int MaxSize { get; }
}
}
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>
```c
using LinearStruct;
namespace BankQueue
{
public class LinkBankQueue : LinkQueue<int>, IBankQueue
{
public int Callnumber { get; private set; }
public int MaxSize { get; }
public int GetCallnumber()
{
if (IsEmpty() && Callnumber == 0)
{
Callnumber = 1;
}
else
{
Callnumber++;
}
return Callnumber;
}
public LinkBankQueue()
{
MaxSize = default(int);
Callnumber = 0;
}
}
}
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>
```c
using LinearStruct;
namespace BankQueue
{
public class CSeqBankQueue : CSeqQueue<int>, IBankQueue
{
public int Callnumber { get; private set; }
public CSeqBankQueue(int size) : base(size)
{
Callnumber = 0;
}
public int GetCallnumber()
{
if (IsEmpty() && Callnumber == 0)
{
Callnumber = 1;
}
else
{
Callnumber++;
}
return Callnumber;
}
}
}
```
<EFBFBD><EFBFBD><EFBFBD>񴰿<EFBFBD>
```c
using System;
using System.Threading;
namespace BankQueue
{
public class ServiceWindow
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public IBankQueue BankQ { get; set; }
//<2F>̷߳<DFB3><CCB7><EFBFBD>
public void Service()
{
while (true)
{
lock (BankQ)
{
Thread.Sleep(2000);
if (!BankQ.IsEmpty())
{
Console.WriteLine();
Console.WriteLine("<EFBFBD><EFBFBD>{0}<7D>ŵ<EFBFBD>{1}<7D>Ŵ<EFBFBD><C5B4><EFBFBD>!", BankQ.QueueFront, Thread.CurrentThread.Name);
BankQ.DeQueue();
}
}
}
}
}
}
```
<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>
```c
using System;
using System.Threading;
namespace BankQueue
{
class BankQueueApp
{
public static void Main(string[] args)
{
try
{
IBankQueue bankQueue = null;
Console.WriteLine("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>1.˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
string seleflag = Console.ReadLine();
switch (seleflag)
{
case "1":
Console.Write("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
int count = Convert.ToInt32(Console.ReadLine());
bankQueue = new CSeqBankQueue(count);
break;
case "2":
bankQueue = new LinkBankQueue();
break;
}
int windowcount = 3;
ServiceWindow[] serviceWindows = new ServiceWindow[windowcount];
Thread[] serviceThread = new Thread[windowcount];
for (int i = 0; i < windowcount; i++)
{
serviceWindows[i] = new ServiceWindow();
serviceWindows[i].BankQ = bankQueue;
serviceThread[i] = new Thread(serviceWindows[i].Service);
serviceThread[i].Name = (i + 1).ToString();
serviceThread[i].Start();
}
while (true)
{
Console.Write("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>");
Console.ReadLine();
if (bankQueue != null && (bankQueue.Length < bankQueue.MaxSize || seleflag == "2"))
{
int callnumber = bankQueue.GetCallnumber();
Console.WriteLine("<EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>{0}<7D><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>{1}λ<><CEBB><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>",
callnumber, bankQueue.Length);
bankQueue.EnQueue(callnumber);
}
else
Console.WriteLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Console.WriteLine();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
```

File diff suppressed because it is too large Load Diff