Evaluar y enviar comentarios
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
Clase genérica Stack

Nota: esta clase es nueva en la versión 2.0 de .NET Framework.

Representa una colección LIFO ("último en entrar, primero en salir") de tamaño variable de instancias del mismo tipo arbitrario.

Espacio de nombres: System.Collections.Generic
Ensamblado: System (en system.dll)

Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(False)> _
Public Class Stack(Of T)
    Implements IEnumerable(Of T), ICollection, _
    IEnumerable
Visual Basic (Uso)
Dim instance As Stack(Of T)
C#
[SerializableAttribute] 
[ComVisibleAttribute(false)] 
public class Stack<T> : IEnumerable<T>, ICollection, 
    IEnumerable
C++
[SerializableAttribute] 
[ComVisibleAttribute(false)] 
generic<typename T>
public ref class Stack : IEnumerable<T>, ICollection, 
    IEnumerable
J#
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript
JScript no admite el uso de métodos y tipos genéricos.

Parámetros de tipo

T

Especifica el tipo de elementos de la pila.

Stack se implementa como una matriz.

La capacidad de una colección Stack es el número de elementos que dicha Stack puede contener. En esta implementación, la capacidad inicial predeterminada para una colección Stack es 10; sin embargo, ese valor predeterminado quizás cambie en las versiones futuras de .NET Framework SDK. Cuando se agregan elementos a una colección Stack, la capacidad aumenta automáticamente según sea necesario mediante la reasignación de la matriz interna. La capacidad puede disminuir llamando al método TrimExcess.

Si Count es menor que la capacidad de la pila, Push es una operación O(1). Si es necesario aumentar la capacidad para albergar el nuevo elemento, Push se convierte en una operación O(n), en la que n es Count. Pop es una operación O(1).

Stack acepta referencia de objeto null (Nothing en Visual Basic) como valor válido para los tipos de referencia y admite elementos duplicados.

En el ejemplo de código siguiente se muestran varios métodos de la clase genérica Stack. En este ejemplo de código se crea una pila de cadenas con capacidad predeterminada y se utiliza el método Push para insertar cinco cadenas en la pila. Se enumeran los elementos de la pila, lo que no cambia el estado de la pila. Se utiliza el método Pop para extraer la primera cadena de la pila. Se usa el método Peek para localizar el siguiente elemento de la pila y, a continuación, se utiliza el método Pop para extraerlo.

También se usa el método ToArray para crear una matriz y copiar en ella los elementos de la pila; a continuación, se pasa esta matriz al constructor Stack que toma IEnumerable y se crea una copia de la pila invirtiendo el orden de los elementos. Después, se muestran los elementos de la copia.

Se crea una matriz del doble de tamaño que el de la pila y se utiliza el método CopyTo para copiar los elementos de la matriz, empezando por el centro de la matriz. Se vuelve a utilizar el constructor Stack para crear una cola de la pila invirtiendo el orden de los elementos; de este modo, los tres elementos null se encuentran al final.

Se usa el método Contains para mostrar que la cadena "four" está en la primera copia de la pila y, después, el método Clear borra la copia y la propiedad Count muestra que la pila está vacía.

Visual Basic
Imports System
Imports System.Collections.Generic

Module Example

    Sub Main

        Dim numbers As New Stack(Of String)
        numbers.Push("one")
        numbers.Push("two")
        numbers.Push("three")
        numbers.Push("four")
        numbers.Push("five")

        ' A stack can be enumerated without disturbing its contents.
        For Each number As String In numbers
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "Popping '{0}'", numbers.Pop())
        Console.WriteLine("Peek at next item to pop: {0}", _
            numbers.Peek())    
        Console.WriteLine("Popping '{0}'", numbers.Pop())

        ' Create another stack, using the ToArray method and the
        ' constructor that accepts an IEnumerable(Of T). Note that
        ' the order of items on the new stack is reversed.
        Dim stack2 As New Stack(Of String)(numbers.ToArray())

        Console.WriteLine(vbLf & "Contents of the first copy:")
        For Each number As String In stack2
            Console.WriteLine(number)
        Next
        
        ' Create an array twice the size of the stack, compensating
        ' for the fact that Visual Basic allocates an extra array 
        ' element. Copy the elements of the stack, starting at the
        ' middle of the array. 
        Dim array2((numbers.Count * 2) - 1) As String
        numbers.CopyTo(array2, numbers.Count)
        
        ' Create a second stack, using the constructor that accepts an
        ' IEnumerable(Of T). The elements are reversed, with the null
        ' elements appearing at the end of the stack when enumerated.
        Dim stack3 As New Stack(Of String)(array2)

        Console.WriteLine(vbLf & _
            "Contents of the second copy, with duplicates and nulls:")
        For Each number As String In stack3
            Console.WriteLine(number)
        Next

        Console.WriteLine(vbLf & "stack2.Contains(""four"") = {0}", _
            stack2.Contains("four"))

        Console.WriteLine(vbLf & "stack2.Clear()")
        stack2.Clear()
        Console.WriteLine(vbLf & "stack2.Count = {0}", _
            stack2.Count)
    End Sub
End Module

' This code example produces the following output:
'
'five
'four
'three
'two
'one
'
'Popping 'five'
'Peek at next item to pop: four
'Popping 'four'
'
'Contents of the first copy:
'one
'two
'three
'
'Contents of the second copy, with duplicates and nulls:
'one
'two
'three
'
'
'
'
'stack2.Contains("four") = False
'
'stack2.Clear()
'
'stack2.Count = 0
C#
using System;
using System.Collections.Generic;

class Example
{
    public static void Main()
    {
        Stack<string> numbers = new Stack<string>();
        numbers.Push("one");
        numbers.Push("two");
        numbers.Push("three");
        numbers.Push("four");
        numbers.Push("five");

        // A stack can be enumerated without disturbing its contents.
        foreach( string number in numbers )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nPopping '{0}'", numbers.Pop());
        Console.WriteLine("Peek at next item to destack: {0}", 
            numbers.Peek());
        Console.WriteLine("Popping '{0}'", numbers.Pop());

        // Create a copy of the stack, using the ToArray method and the
        // constructor that accepts an IEnumerable<T>.
        Stack<string> stack2 = new Stack<string>(numbers.ToArray());

        Console.WriteLine("\nContents of the first copy:");
        foreach( string number in stack2 )
        {
            Console.WriteLine(number);
        }
        
        // Create an array twice the size of the stack and copy the
        // elements of the stack, starting at the middle of the 
        // array. 
        string[] array2 = new string[numbers.Count * 2];
        numbers.CopyTo(array2, numbers.Count);
        
        // Create a second stack, using the constructor that accepts an
        // IEnumerable(Of T).
        Stack<string> stack3 = new Stack<string>(array2);

        Console.WriteLine("\nContents of the second copy, with duplicates and nulls:");
        foreach( string number in stack3 )
        {
            Console.WriteLine(number);
        }

        Console.WriteLine("\nstack2.Contains(\"four\") = {0}", 
            stack2.Contains("four"));

        Console.WriteLine("\nstack2.Clear()");
        stack2.Clear();
        Console.WriteLine("\nstack2.Count = {0}", stack2.Count);
    }
}

/* This code example produces the following output:

five
four
three
two
one

Popping 'five'
Peek at next item to destack: four
Popping 'four'

Contents of the first copy:
one
two
three

Contents of the second copy, with duplicates and nulls:
one
two
three




stack2.Contains("four") = False

stack2.Clear()

stack2.Count = 0
 */
System.Object
  System.Collections.Generic.Stack

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Stack puede admitir varios sistemas de lectura a la vez, siempre y cuando no se modifique la colección. Aun así, por su naturaleza, la enumeración mediante una colección no es un procedimiento seguro para la ejecución de subprocesos. Para garantizar la seguridad para la ejecución de subprocesos durante la enumeración, puede bloquear la colección durante toda la enumeración. Para permitir que varios subprocesos obtengan acceso de lectura y escritura a la colección, debe implementar su propia sincronización.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker