C#数据结构--队列Queue

本文探讨了C#中数据结构队列Queue的概念,重点介绍了两种实现方式:顺序队列SeqQueue和链队列。通过实例说明了队列的先进先出(FIFO)原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先进先出,后进后出




For Example:

void Start ()
    {
		Queue<int> queue=new Queue<int>();

        //入队(添加数据)
        queue.Enqueue(10); //对首
        queue.Enqueue(20);
        queue.Enqueue(30);
        queue.Enqueue(40); //队尾

        Debug.Log("队列中的数据个数为:"+queue.Count);
        //出队(取得对首数据,并删除)
        int temp=queue.Dequeue();
        Debug.Log(temp);
        Debug.Log("Dequeue之后数据的个数为:"+queue.Count);
        int temp2 = queue.Peek();
        Debug.Log(temp2);
        Debug.Log("Peek之后队列中的数据个数为:"+queue.Count);
        queue.Clear();
        Debug.Log("Clear之后数据的个数为:"+queue.Count);

    }


自己写的顺序队列(SeqQueue)


定义接口的方法:


public interface IQueue<T>
{
    int Count { get; }
    int GetLength();
    bool IsEmpty();
    void Clear();
    void Enqueue(T item);
    T Dequeue();
    T Peek();

}




public class SeqQueue<T>:IQueue<T>
{
    private T[] data;
    private int count;
    private int front; //对首(对首的索引-1)
    private int rear;  //队尾(队尾的索引)

    public SeqQueue():this(10)
    {
       
    }

    public SeqQueue(int size)
    {
        data = new T[size];
        count = 0;
        front = -1;
        rear = -1;
    }
    public int Count {
        get { return count; }
    }
    public int GetLength()
    {
        return count;
    }

    public void Clear()
    {
        count = 0;
        front = rear = -1;
    }

    public bool IsEmpty()
    {
        return count==0;
    }

    public void Enqueue(T item)
    {
        if (count == data.Length)
        {
            Debug.Log("数列已存满,不能再存储了");
        }
        else
        {
            if (rear == data.Length - 1)
            {
                data[0] = item;
                rear = 0;
                count++;
            }
            else
            {
                data[rear + 1] = item;
                rear++;
                count++;
            }
        }
    }

    public T Dequeue()
    {
        if (count > 0)
        {
            T temp = data[front + 1];
            front++;
            count--;
            return temp;
        }
        else
        {
            Debug.Log("该队列里没有数据,不能出对");
            return default(T);
        }
    }

    public T Peek()
    {
        return data[front+1];
    }
}




链队列:


public class Node<T>
{
    private T data;
    private Node<T> next;

    public Node(T item)
    {
        data = item;
    }

    public T Data
    {
        get { return this.data; }
        set { this.data = value; }
    }

    public Node<T> Next
    {
        get { return this.next; }
        set { this.next = value; }
    }
}




//链队列的创建
public class LinkQueue<T> : IQueue<T>
{
    private Node<T> front;  //对首链表
    private Node<T> rear;   //队尾链表
    private int count;      //数据的个数

    public LinkQueue()
    {
        front = null;
        rear = null;
        count = 0;
    }
    public int Count { get{return count;}}
    public int GetLength()
    {
        return count;
    }

    public void Clear()
    {
        front=null;
        rear = null;
        count = 0;
    }

    public bool IsEmpty()
    {
        return count == 0;
    }

    public void Enqueue(T item)
    {
        Node<T> newNode=new Node<T>(item);
        if (count == 0)
        {
            front = newNode;
            rear = newNode;
            count = 1;
        }
        else 
        {
            rear.Next = newNode;
            rear = newNode;
            count++;
        }
        
    }

    public T Dequeue()
    {
        if (count == 0)
        {
            Debug.Log("队列里面没有数据,不能进行操作");
            return default(T);
        }
        else if (count == 1)
        {
            T temp = front.Data;
            front = rear = null;
            count = 0;
            return temp;
        }
        else
        {
            T temp = front.Data;
            front = front.Next;
            count--;
            return temp;
        }
    }

    public T Peek()
    {
        if (front != null)
        {
            return front.Data;
        }
        else
        {
            return  default(T);
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值