Page d'Accueil

Classes intégrées de collection : Files d'attente

 

Introduction

Une file d'attente est une technique d'employer une liste de sorte que le premier article supplémentaire à la liste soit le premier à enlever. Ceci est mentionné comme premier-dans le premier-dehors (fifo). Pour l'illustrer, quand les gens se tiennent dans la ligne à un caissier d'un supermarché, le premier client dans la ligne devant le caissier sera le premier à servir et le premier à partir du supermarché.

Pour soutenir des files d'attente, le cadre de .NET fournit la classe arrangée en série de file d'attente qui met en application l'ICollection et les interfaces d'IEnumerable.

Créer une file d'attente

Pour créer une file d'attente, vous pouvez déclarer une variable de file d'attente en utilisant un de ses quatre constructeurs. Le constructeur de défaut te permet de commencer une liste sans ajouter principalement un article à lui. Voici un exemple :

public static class Program
{
    public static int Main(string[] args)
    {
        Queue que = new Queue();

        return 0;
    }
}

Après cette déclaration, le compilateur réserve un certain espace mémoire de défaut pour la variable. Si vous voulez indiquer combien l'espace devrait être principalement assigné pour la variable, vous pouvez employer le constructeur suivant :

public Queue(int capacity);

Construction d'une file d'attente

L'action qui se compose ajouter un article à la file d'attente s'appelle « mettent en file d'attente ». Pour effectuer cette opération, vous pouvez appeler la méthode de Queue.Enqueue () dont la syntaxe est :

public virtual void Enqueue(object obj);

Cette méthode prend comme argument l'objet que vous voulez s'ajouter à la file d'attente et aux endroits il comme le premier candidat à enlever. Voici les exemples d'appeler la méthode :

using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;

public enum Majors
{
    English,
    Nursing,
    Accounting,
    ComputerSciences,
    BusinessManagement,
    MathematicalSciences,
    HumanResourceDevelopment
}

[Serializable]
public class Student
{
    public string FullName;
    public DateTime DateOfBirth;
    public Majors Major;
}

public static class Program
{
    public static int Main(string[] args)
    {
        Queue que = new Queue();
        Student std = null;

        std = new Student();
        std.FullName = "Donald Palau";
        std.DateOfBirth = new DateTime(1988, 5, 12);
        std.Major = Majors.ComputerSciences;
        que.Enqueue(std);

        std = new Student();
        std.FullName = "Arlene Kafka";
        std.DateOfBirth = new DateTime(1992, 8, 4);
        std.Major = Majors.BusinessManagement;
        que.Enqueue(std);

        std = new Student();
        std.FullName = "Hortense Moons";
        std.DateOfBirth = new DateTime(1994, 10, 7);
        std.Major = Majors.MathematicalSciences;
        que.Enqueue(std);

        SaveStudents(que);
        return 0;
    }

    public static void SaveStudents(Queue q)
    {
        FileStream fsStudent = new FileStream("Students.roh",
                                            FileMode.Create,
                                            FileAccess.Write);
        BinaryFormatter bfStudent = new BinaryFormatter();

        bfStudent.Serialize(fsStudent, q);
        fsStudent.Close();
    }

    public static Queue OpenStudents()
    {
        FileStream fsStudent = new FileStream("Students.roh",
                                            FileMode.Open,
                                            FileAccess.Read);
        BinaryFormatter bfStudent = new BinaryFormatter();

        Queue pupils = (Queue)bfStudent.Deserialize(fsStudent);
        fsStudent.Close();

        return pupils;
    }
}

Si vous avez déjà une liste créée d'une classe qui met en application l'interface d'ICollection, vous pouvez créer une file d'attente basée sur cette liste. Pour faire ceci, employer le constructeur suivant de la classe de file d'attente :

public Queue(ICollection col);

Ce constructeur accepte un applicateur d'ICollection comme argument. Voici un exemple :

using System;

public enum Majors
{
    English,
    Nursing,
    Accounting,
    ComputerSciences,
    BusinessManagement,
    MathematicalSciences,
    HumanResourceDevelopment
}

public class Student
{
    public string FullName;
    public DateTime DateOfBirth;
    public Majors Major;
}

public static class Program
{
    public static int Main(string[] args)
    {
        Student std = null;
        ArrayList lstStudents = new ArrayList();

        std = new Student();
        std.FullName = "Hermine Justice";
        std.DateOfBirth = new DateTime(1990, 3, 24);
        std.Major = Majors.English;
        lstStudents.Add(std);

        std = new Student();
        std.FullName = "Patricia Palermo";
        std.DateOfBirth = new DateTime(1989, 12, 20);
        std.Major = Majors.BusinessManagement;
        lstStudents.Add(std);

        Queue que = new Queue(lstStudents);
        
        return 0;
    }
}

Recherche des articles d'une file d'attente

Se rappeler que le premier article s'est ajouté aux séjours d'une file d'attente devant tous les autres qui seraient ajoutés. Pour obtenir (seulement) le premier article d'une file d'attente, la classe de file d'attente est équipée d'une méthode appelée coup d'oeil (). Sa syntaxe est :

public virtual object Peek();

Cette méthode renvoie un objet d'objet qui représente le premier article de la file d'attente (se rappeler de la mouler à votre objet particulier au besoin). Voici deux exemples de l'appeler :

using System;
using System.Collections;

public enum Majors
{
    English,
    Nursing,
    Accounting,
    ComputerSciences,
    BusinessManagement,
    MathematicalSciences,
    HumanResourceDevelopment
}

public class Student
{
    public string FullName;
    public DateTime DateOfBirth;
    public Majors Major;
}

public static class Program
{
    public static int Main(string[] args)
    {
        Queue que = new Queue();
        Student std = null;

        std = new Student();
        std.FullName = "Donald Palau";
        std.DateOfBirth = new DateTime(1988, 5, 12);
        std.Major = Majors.ComputerSciences;
        que.Enqueue(std);

        std = new Student();
        std.FullName = "Arlene Kafka";
        std.DateOfBirth = new DateTime(1992, 8, 4);
        std.Major = Majors.BusinessManagement;
        que.Enqueue(std);

        Console.WriteLine("The current first item of the queue is");
        Student s1 = (Student)que.Peek();
        Console.WriteLine("== Student Information ==");
        Console.WriteLine("Full Name:     {0}", s1.FullName);
        Console.WriteLine("Date of Birth: {0:d}", s1.DateOfBirth);
        Console.Write("Major:         ");
        switch (s1.Major)
        {
            case Majors.English:
                Console.WriteLine("English");
                break;
            case Majors.Nursing:
                Console.WriteLine("Nursing");
                break;
            case Majors.Accounting:
                Console.WriteLine("Accounting");
                break;
            case Majors.ComputerSciences:
                Console.WriteLine("Computer Sciences");
                break;
            case Majors.BusinessManagement:
                Console.WriteLine("Business Management");
                break;
            case Majors.MathematicalSciences:
                Console.WriteLine("Mathematical Sciences");
                break;
            case Majors.HumanResourceDevelopment:
                Console.WriteLine("Human Resource Development");
                break;
        }

        Console.WriteLine("--------------------------------------------");

        std = new Student();
        std.FullName = "Hortense Moons";
        std.DateOfBirth = new DateTime(1994, 10, 7);
        std.Major = Majors.MathematicalSciences;
        que.Enqueue(std);

        Console.WriteLine("The current first item of the queue is");
        Student s2 = (Student)que.Peek();
        Console.WriteLine("== Student Information ==");
        Console.WriteLine("Full Name:     {0}", s2.FullName);
        Console.WriteLine("Date of Birth: {0:d}", s2.DateOfBirth);
        Console.Write("Major:         ");
        switch (s2.Major)
        {
            case Majors.English:
                Console.WriteLine("English");
                break;
            case Majors.Nursing:
                Console.WriteLine("Nursing");
                break;
            case Majors.Accounting:
                Console.WriteLine("Accounting");
                break;
            case Majors.ComputerSciences:
                Console.WriteLine("Computer Sciences");
                break;
            case Majors.BusinessManagement:
                Console.WriteLine("Business Management");
                break;
            case Majors.MathematicalSciences:
                Console.WriteLine("Mathematical Sciences");
                break;
            case Majors.HumanResourceDevelopment:
                Console.WriteLine("Human Resource Development");
                break;
        }

        Console.WriteLine("--------------------------------------------");

        return 0;
    }
}

Ceci produirait :

The current first item of the queue is
== Student Information ==
Full Name:     Donald Palau
Date of Birth: 5/12/1988
Major:         Computer Sciences
--------------------------------------------
The current first item of the queue is
== Student Information ==
Full Name:     Donald Palau
Date of Birth: 5/12/1988
Major:         Computer Sciences
--------------------------------------------
Press any key to continue . . .

Pour vous donner accéder aux articles d'une file d'attente, la classe de file d'attente dépasse la méthode de GetEnumerator () de classe d'IEnumerable qu'elle met en application. Ceci te permet d'employer la boucle de foreach pour énumérer sans interruption les membres d'une file d'attente. Voici un exemple :

using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;

public enum Majors
{
    English,
    Nursing,
    Accounting,
    ComputerSciences,
    BusinessManagement,
    MathematicalSciences,
    HumanResourceDevelopment
}

[Serializable]
public class Student
{
    public string FullName;
    public DateTime DateOfBirth;
    public Majors Major;
}

public static class Program
{
    public static int Main(string[] args)
    {
        Student std = null;
        Queue lstStudents = OpenStudents();

        std = new Student();
        std.FullName = "Hermine Justice";
        std.DateOfBirth = new DateTime(1990, 3, 24);
        std.Major = Majors.English;
        lstStudents.Enqueue(std);

        std = new Student();
        std.FullName = "Patricia Palermo";
        std.DateOfBirth = new DateTime(1989, 12, 20);
        std.Major = Majors.BusinessManagement;
        lstStudents.Enqueue(std);

        SaveStudents(lstStudents);
        lstStudents = OpenStudents();
        ShowStudents(lstStudents);

        return 0;
    }

    public static void ShowStudents(Queue q)
    {
        foreach (Student s in q)
        {
            Console.WriteLine("== Student Information ==");
            Console.WriteLine("Full Name:     {0}", s.FullName);
            Console.WriteLine("Date of Birth: {0:d}", s.DateOfBirth);
            Console.Write("Major:         ");
            switch (s.Major)
            {
                case Majors.English:
                    Console.WriteLine("English");
                    break;
                case Majors.Nursing:
                    Console.WriteLine("Nursing");
                    break;
                case Majors.Accounting:
                    Console.WriteLine("Accounting");
                    break;
                case Majors.ComputerSciences:
                    Console.WriteLine("Computer Sciences");
                    break;
                case Majors.BusinessManagement:
                    Console.WriteLine("Business Management");
                    break;
                case Majors.MathematicalSciences:
                    Console.WriteLine("Mathematical Sciences");
                    break;
                case Majors.HumanResourceDevelopment:
                    Console.WriteLine("Human Resource Development");
                    break;
            }

            Console.WriteLine("--------------------------------------------");
        }
    }

    public static void SaveStudents(Queue q)
    {
        FileStream fsStudent = new FileStream("Students.roh",
                                            FileMode.Create,
                                            FileAccess.Write);
        BinaryFormatter bfStudent = new BinaryFormatter();

        bfStudent.Serialize(fsStudent, q);
        fsStudent.Close();
    }

    public static Queue OpenStudents()
    {
        FileStream fsStudent = new FileStream("Students.roh",
                                            FileMode.Open,
                                            FileAccess.Read);
        BinaryFormatter bfStudent = new BinaryFormatter();

        Queue pupils = (Queue)bfStudent.Deserialize(fsStudent);
        fsStudent.Close();

        return pupils;
    }
}

Ceci produirait :

== Student Information ==
Full Name:     Donald Palau
Date of Birth: 5/12/1988
Major:         Computer Sciences
--------------------------------------------
== Student Information ==
Full Name:     Arlene Kafka
Date of Birth: 8/4/1992
Major:         Business Management
--------------------------------------------
== Student Information ==
Full Name:     Hortense Moons
Date of Birth: 10/7/1994
Major:         Mathematical Sciences
--------------------------------------------
== Student Information ==
Full Name:     Hermine Justice
Date of Birth: 3/24/1990
Major:         English
--------------------------------------------
== Student Information ==
Full Name:     Patricia Palermo
Date of Birth: 12/20/1989
Major:         Business Management
--------------------------------------------
Press any key to continue . . .

Enlèvement des articles d'une file d'attente

Le processus d'enlever un article d'une file d'attente s'appelle « retirent de la file d'attente ». Pour vous aider avec effectuer cette opération, la classe de file d'attente est équipée d'une méthode appelée retirent de la file d'attente. Sa syntaxe est :

public virtual object Dequeue();

Le but primaire de cette méthode est de supprimer le premier article de la liste de file d'attente. Si vous êtes intéressés de connaître quel article a été supprimé, des retours de cette méthode il.

Pour enlever tous les articles de la file d'attente, vous pouvez appeler () la méthode claire de classe. Sa syntaxe est :

public virtual void Clear();
 

Page d'Accueil Copyright © 2007, Yevol