Ngăn xếp là một tập hợp mà thứ tự là vào trước ra sau hay vào sao ra trước (LIFO), tương như một chồng đĩa được xếp trong nhà hàng. Đĩa ở trên cùng tức là đĩa xếp sau thì được lấy ra trước do vậy đĩa nằm dưới đáy tức là đĩa đưa vào đầu tiên sẽ được lấy ra sau cùng. Hai phương thức chính cho việc thêm và xóa từ stack là Push và Pop, ngoài ra ngăn xếp cũng đưa ra phương thức Peek tương tự như Peek trong hàng đợi. Bảng sau minh họa các phương thức và thuộc tính của lớp Stack.
Muốn in ra các giá trị phần tử trong stack ta dùng PrintValues();
Queue, và Stack đều chứa phương thức nạp chồng CopyTo() và ToArray() dể sao chép những thành phần của chúng qua một mảng. Trong trường hợp của ngăn xếp phương thức CopyTo() sẽ chép những thành phần của chúng đến mảng một chiều đã hiện hữu, và viết chồng lên nội dung của mảng bắt đầu tại chỉ mục mà ta xác nhận. Phương thức ToArray() trả về một mảng mới với những nội dung của những thành phần trong mảng.
Ví dụ 19: Sử dụng kiểu Stack. namespace Programming_CSharp {
using System;
using System.Collections; // lớp đơn giản để lưu trữ public class Tester {
{
Stack intStack = new Stack(); // đưa vào ngăn xếp
for (int i=0; i < 8; i++) { intStack.Push(i*5); } // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack );
// xóa phần tử đầu tiên
Console.WriteLine(“\nPop\t{0}”, intStack.Pop()); // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack ); // xóa tiếp phần tử khác Console.WriteLine(“\nPop\t{0}”, intStack.Pop()); // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack );
// xem thành phần đầu tiên stack
Console.WriteLine(“\nPeek \t{0}”, intStack.Peek()); // hiển thị stack
Console.Write(“intStack values:\t”); PrintValues( intStack );
// khai báo mảng với 12 phần tử
Array targetArray = Array.CreateInstance(typeof(int), 12); for(int i=0; i <=8; i++)
{
targetArray.SetValue(100*i, i); }
// hiển thị giá trị của mảng
Console.WriteLine(“\nTarget array: ”); PrintValues( targetArray );
// chép toàn bộ stack vào mảng tại vị trí 6 intStack.CopyTo( targetArray, 6);
// hiển thị giá trị của mảng sau copy
Console.WriteLine(“\nTarget array after copy: ”); PrintValues( targetArray );
// chép toàn bộ stack vào mảng mới Object[] myArray = intStack.ToArray(); // hiển thị giá trị của mảng mới
Console.WriteLine(“\nThe new array: ”); PrintValues( myArray );
}
public static void PrintValues(IEnumerable myCollection) {
IEnumerator myEnumerator = myCollection.GetEnumerator(); while (myEnumerator.MoveNext()) Console.Write(“{0} ”, myEnumerator.Current); Console.WriteLine(); } } } Kết quả: intStack values: 35 30 25 20 15 10 5 0 Pop 35 intStack values: 30 25 20 15 10 5 0 Pop 30 intStack values: 25 20 15 10 5 0 Peek 25 intStack values: 25 20 15 10 5 0 Target array: 0 100 200 300 400 500 600 700 800 0 0 0 Target array after copy:
0 100 200 300 400 500 25 20 15 10 5 0 The new array:
Kết quả cho thấy rằng các mục được đưa vào trong ngăn xếp và được lấy ra theo thứ tự LIFO.