问题:
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//第一个题目是List的出队入队,2.11是堆栈的出队入队测试,这个是队列的
//感觉很有可能要求着栈、列表和队列来考综合的一部分。
namespace _2
{
interface QueueInterface
{
void InQueue(int x); // 向队列队尾入列新元素
int OutQueue(); // 队列队头元素出列
bool Empty(); // 判断队列是否为空
bool Full(); // 判断队列是否已满
void Clear(); // 将队列清空
int Count { get; } // 获取队列中现有元素个数
}
class Queue<T> //用类实现接口
{
private int[] elements;// 存储队列元素的数组
private int front;// 队头索引
private int rear;// 队尾索引
private int capacity; // 队列最大容量
private int count;// 当前元素个数
public Queue(int size)
{
elements = new int[size];
capacity = size;
front = 0;
rear = -1;
count = 0;
}
//入队
public void InQueue(int x)
{
if (Full())
{
Console.WriteLine("队列已满!");
return;
}
rear = (rear + 1) % capacity;
elements[rear] = x;
count++;
}
//出队
public int OutQueue()
{
if (Empty())
{
Console.WriteLine("队列为空!");
return default;
}
int item = elements[front];
front = (front + 1) % capacity;
count--;
return item;
}
public bool Empty()
{
return count == 0;
}
public bool Full()
{
return count == capacity;
}
public void Clear()
{
front = 0;
rear = -1;
count = 0;
}
public int Count => count;//这个动态指针感觉挺有意思的
}
internal class Program
{
static void Main(string[] args)
{
Queue<int> queue = new Queue<int>(5);
// 测试入队
while (true)
{
Console.WriteLine("请输入操作(1 为入队,2 为出队,3 为清空队列,4 为退出):");
int input = int.Parse(Console.ReadLine());
if (input == 1)
{
Console.Write("请输入要入队的整数: ");
int value = int.Parse(Console.ReadLine());
queue.InQueue(value);
Console.WriteLine("当前元素个数: " + queue.Count);
}
else if (input == 2)
{
queue.OutQueue();
Console.WriteLine("当前元素个数: " + queue.Count);
}
else if (input ==3)
{
queue.Clear();
Console.WriteLine("当前元素个数: " + queue.Count);
}
else if (input== 4)
{
Console.WriteLine("程序结束。");
break;
}
else
{
Console.WriteLine("无效的输入,请重试。");
}
}
//Console.WriteLine("入队元素:1, 2, 3");
//queue.InQueue(1);
//queue.InQueue(2);
//queue.InQueue(3);
//Console.Write("测试出队元素:" + queue.OutQueue());
//Console.Write("判断是否为空:" + queue.Empty());
//for (int i = 0; i < 3; i++)
//{
// queue.InQueue(i + 4);
//}
//Console.WriteLine("判断队列是否已满: " + queue.Full());
//Console.WriteLine("清空队列: ");
//queue.Clear();
//Console.WriteLine("当前元素个数: " + queue.Count);
清空队列
//queue.Clear();
//Console.WriteLine("队列已清空,当前元素个数: " + queue.Count);
}
}
}
运行结果:
某油作业题,持续更新中,欢迎关注,共勉!