天天看点

C#队列和栈的使用

一、队列

队列是其元素以先进先出(Firstin,Firstout,FIFO)的方式来处理的集合。先放入队列中的元素会先读取。队列使用System.Collections.Generic命名空间中的泛型类Queue<T>实现。

队列的成员

Count:Count属性返回队列中元素个数。

Enqueue:Enqueue()方法在队列一端添加一个元素。

Dequeue:Dequeue()方法在队列的头部读取和删除元素。如果在调用Dequeue()方法时,队列中不再有元素,就抛出一个InvalidOperationException类型的异常。

Peek:Peek()方法从队列的头部读取一个元素,但不删除它。

TrimExcess:TrimExcess()方法重新设置队列的容量。Dequeue()方法从队列中删除元素,但它不会重新设置队列的容量。要从队列的头部去除空元素,应使用TrimExcess()方法。

Clear:Clear()方法从队列中移除所有的元素。

ToArray:ToArray()复制队列到一个新的数组中。

实例:将员工信息列表加入到队列中并读取队列。

创建员工信息实体类:

/// <summary>
/// 用户信息实体类
/// </summary>
public class UserInfo
{
    public UserInfo(int userID, string userName, string sex)
    {
        this.UserID = userID;
        this.UserName = userName;
        this.Sex = sex;
    }

    public int UserID { get; set; }
    public string UserName { get; set; }
    public string Sex { get; set; }
}
           

获取用户列表方法:

/// <summary>
/// 获取用户列表
/// </summary>
public static List<UserInfo> GetUserList()
{
    List<UserInfo> userList = new List<UserInfo>();
    userList.Add(new UserInfo(1, "张三", "男"));
    userList.Add(new UserInfo(2, "李四", "女"));
    userList.Add(new UserInfo(3, "王五", "男"));
    return userList;
}
           

队列的使用:

/// <summary>
/// 队列的使用
/// </summary>
public static void QueueSample()
{
    //创建一个队列
    Queue<UserInfo> queue = new Queue<UserInfo>();

    //获取用户列表
    List<UserInfo> userList = GetUserList();

    //使用Enqueue()方法将用户信息加入到队列中(入列)
    foreach (var user in userList)
    {
        queue.Enqueue(user);
    }

    //使用Count属性获取队列中元素个数
    int queueCount = queue.Count;
    Console.WriteLine(String.Format("队列中有{0}个用户信息。", queueCount));    //输出:3

    //使用Dequeue()方法从队列的头部读取和删除元素(出列)
    for (int i = 0; i < queueCount; i++)
    {
        UserInfo user = queue.Dequeue();
        Console.WriteLine(String.Format("用户ID:{0};用户名称:{1};性别:{2}", user.UserID, user.UserName, user.Sex));
    }

    //使用Count属性获取队列中元素个数
    queueCount = queue.Count;
    Console.WriteLine(String.Format("队列中有{0}个用户信息。", queueCount));  //输出:0
}
           

运行结果:

C#队列和栈的使用

二、栈

栈是与队列非常类似的另一个容器,只是要使用不同的方法访问栈。最后添加到栈中的元素会最先读取。栈是一个后进先出(Lastin,Firstout,LIFO)的容器。栈使用System.Collections.Generic命名空间中的泛型类Stack<T>实现。

栈的成员

Count:Count属性返回栈中的元素个数。

Push:Push()方法在栈顶添加一个元素。

Pop:Pop()方法从栈顶删除一个元素,并返回该元素。如果栈是空的,就抛出一个InvalidOperationException类型的异常。

Peek:Peek()方法返回栈顶的元素,但不删除它。

Contains:Contains()方法确定某个元素是否在栈中,如果是,就返回true。

实例:将员工信息列表添加到栈中并读取栈。

/// <summary>
/// 栈的使用
/// </summary>
public static void StackSample()
{
    //创建一个栈
    Stack<UserInfo> stack = new Stack<UserInfo>();

    //获取用户列表
    List<UserInfo> userList = GetUserList();

    //使用Push()方法将用户信息加入到栈顶(入栈)
    foreach (var user in userList)
    {
        stack.Push(user);
    }

    //使用Count属性获取栈中元素个数
    int stackCount = stack.Count;
    Console.WriteLine(String.Format("栈中有{0}个用户信息。", stackCount));    //输出:3

    //使用Pop()方法从栈顶删除一个元素,并返回该元素(出栈)
    for (int i = 0; i < stackCount; i++)
    {
        UserInfo user = stack.Pop();
        Console.WriteLine(String.Format("用户ID:{0};用户名称:{1};性别:{2}", user.UserID, user.UserName, user.Sex));
    }

    //使用Count属性获取栈中元素个数
    stackCount = stack.Count;
    Console.WriteLine(String.Format("栈中有{0}个用户信息。", stackCount));    //输出:0
}
           

运行结果:

C#队列和栈的使用