using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataStruct_Pro.Tree
{
public class QueueNode
{
public int data;
public QueueNode next;
public QueueNode(int data)
{
this.data = data;
this.next = null;
}
}
public class Linked_Queue
{
public QueueNode front;
public QueueNode rear;
public Linked_Queue()
{
front = null;
rear = null;
}
public bool Enqueue(int value)
{
QueueNode node = new QueueNode(value);
if (rear == null) front = node;
else rear.next = node;
rear = node;
return true;
}
public int Dequeue(int action)
{
int value;
QueueNode tempNode, startNode;
if (!(front == null) && action == 1) //当队头不为空的时候
{
if (front == rear) rear = null; //如果队列只剩一个了的话
value = front.data;
front = front.next;
return value;
}
else if (!(rear == null) && action == 2)//当队尾不为空,并且给予一个Action
{
value = rear.data; //先将需要返回的值保存到value里面去
tempNode = front;
while(tempNode.next != rear && tempNode.next != null)
{
tempNode = tempNode.next; //目的是将tempNode节点更新到rear节点的前一个,从而可以将rear赋值给tempNode节点
}
rear = tempNode; //将尾节点更新
if ((front.next == null) || (rear.next == null))//当只剩一个节点怎么办
{
front = null;
rear = null;
}
return value;
}
else
return -1;
}
}
class Class4
{
public static void Main(string[] args)
{
Linked_Queue queue = new Linked_Queue();
int temp;
Console.WriteLine("使用链表来实现双向队列");
Console.WriteLine("====================");
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6);
temp = queue.Dequeue(1);
Console.WriteLine("从前端取出数据: " + temp);
temp = queue.Dequeue(2);
Console.WriteLine("从后面取出数据: " + temp);
temp = queue.Dequeue(1);
Console.WriteLine("从前端取出数据: " + temp);
temp = queue.Dequeue(2);
Console.WriteLine("从后面取出数据: " + temp);
Console.ReadLine();
}
}
}
测试效果: