内容提交
This commit is contained in:
@@ -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>
|
||||
|
||||

|
||||
|
||||
<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><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>
|
||||
|
||||

|
||||
|
||||
```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>
|
||||
|
||||

|
||||
|
||||
```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>
|
||||
|
||||

|
||||
|
||||
```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>
|
||||
|
||||
|
||||

|
||||
|
||||
```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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
1093
DataStructureAndAlgorithm/10 队列与多线程.md
Normal file
1093
DataStructureAndAlgorithm/10 队列与多线程.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user