add cs file to comply dequeue

This commit is contained in:
PeixiZ 2022-12-30 17:22:52 +08:00 committed by GitHub
parent 0950e43fd7
commit 8ae16634c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,49 +1,96 @@
/** public class DLinkNumbers
* File: deque.cs
* Created Time: 2022-12-30
* Author: moonache (microin1301@outlook.com)
*/
using NUnit.Framework;
namespace hello_algo.chapter_stack_and_queue
{ {
public class deque public int value;
public DLinkNumbers front;
public DLinkNumbers rear;
}
public class Deque
{
private static DLinkNumbers head, end;
private static int length;
public int Empty()
{
return length;
}
public int EnHead(int value)
{
DLinkNumbers temp = new DLinkNumbers { value = value };
if (head == null)
{
end = temp;
head = temp;
}
else
{
temp.front = head;
head.rear = temp;
head = temp;
}
length += 1;
return 1;
}
public int OutHead()
{
if (length == 0)
return -1;
int number = head.value;
head = head.front;
length -= 1;
return number;
}
public int EnEnd(int value)
{
DLinkNumbers temp = new DLinkNumbers { value = value };
if (end == null)
{
end = temp;
head = temp;
}
else
{
temp.front = end;
end.rear = temp;
end = temp;
}
length += 1;
return 1;
}
public int OutEnd()
{
if (length == 0)
return -1;
int number = end.value;
end = end.front;
length -= 1;
return number;
}
}
class TestForDeque
{ {
[Test] [Test]
public void Test() public void Do()
{ {
/* 初始化双向队列 */ Deque de = new Deque();
// 在 C# 中,将链表 LinkedList 看作双向队列来使用 de.EnHead(12);
LinkedList<int> deque = new LinkedList<int>(); de.EnHead(13);
de.EnHead(14);
/* 元素入队 */ de.OutEnd();
deque.AddLast(2); // 添加至队尾 de.OutEnd();
deque.AddLast(5); de.OutEnd();
deque.AddLast(4); de.OutEnd();
deque.AddFirst(3); // 添加至队首 de.OutEnd();
deque.AddFirst(1); de.EnEnd(12);
Console.WriteLine("双向队列 deque = " + String.Join(",", deque.ToArray())); de.EnEnd(13);
de.EnEnd(14);
/* 访问元素 */ de.OutHead();
int peekFirst = deque.First.Value; // 队首元素 de.OutHead();
Console.WriteLine("队首元素 peekFirst = " + peekFirst); de.OutHead();
int peekLast = deque.Last.Value; // 队尾元素
Console.WriteLine("队尾元素 peekLast = " + peekLast);
/* 元素出队 */
deque.RemoveFirst(); // 队首元素出队
Console.WriteLine("队首元素出队后 deque = " + String.Join(",", deque.ToArray()));
deque.RemoveLast(); // 队尾元素出队
Console.WriteLine("队尾元素出队后 deque = " + String.Join(",", deque.ToArray()));
/* 获取双向队列的长度 */
int size = deque.Count;
Console.WriteLine("双向队列长度 size = " + size);
/* 判断双向队列是否为空 */
bool isEmpty = deque.Count == 0;
Console.WriteLine("双向队列是否为空 = " + isEmpty);
}
} }
} }