用前后指针模拟 指针只在数组内循环 动态扩容需要另外的设计
class Program
{
static void Main(string[] args)
{
MyQueue queue = new MyQueue(5);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6);
queue.Enqueue(8);
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
Console.WriteLine("此时队列的头部为{0}", queue.Peek());
Console.ReadLine();
}
}
class MyQueue
{
int[] array;
int front;
int rear;
int capacity;//表示数组的大小
int size;//表示实际的数量有多少
public MyQueue(int capacity)
{
array = new int[capacity];
front = 0;
rear = -1;
size = 0;
}
public bool IsEmpty()
{
return size == 0;
}
public bool IsFull()
{
if (size == array.Length)
{
Console.WriteLine("队列满了");
return true;
}
return false;
}
//入队
public void Enqueue(int item)
{
if (IsFull())
{
Console.WriteLine("无法入队");
return;
}
//入队后 后面的指针 往右移动
rear = (rear + 1) % array.Length;
array[rear] = item;
size++;
Console.WriteLine("入队元素"+item);
}
//出队
public int Dequeue()
{
if (IsEmpty())
{
Console.WriteLine("队列已空");
return -1;
}
//出队后,前面的指针 往后移动
int item;
item = array[front];
front = (front + 1) % array.Length;
size--;
Console.WriteLine("出队元素" + item);
return item;
}
//获取队列的头部
public int Peek()
{
if (IsEmpty())
{
Console.WriteLine("队列已空");
return -1;
}
return array[front];
}
}