Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Stack (ngăn xếp) trong C#

3775 Lượt xem 1 Bình luận 0 Lượt báo xấu
Stack là gì nhỉ? À ừm, theo nghĩa tiếng Anh nó có nghĩa là “đống”. Thật ra, bạn có thể hiểu stack như là 1 cái thùng đựng sách. Bạn bỏ từ từ sách vào, có phải sách nào bạn bỏ vào cuối cùng cũng nằm ở trên đầu thùng không? Có nghĩa là đưa vào sau nhưng lấy ra trước (LIFO – Last In First Out).

Giả sử bạn đã được học qua về stack khi học cấu trúc dữ liệu cách đây mấy năm, từ hồi còn “write on C”. Chắc hẳn trước khi sử dụng, bạn phải tạo ra cho mình một cấu trúc dữ liệu để mô tả stack trong lập trình. Nhưng nay, với C#, bạn sẽ không phải mò mẫm từng quyển sách cấu trúc dữ liệu để ôn lại cách cài đặt stack khi bỗng dưng quên mất, mà công việc lúc này của bạn lúc này chỉ đơn giản là…lấy mà dùng thông qua class Stack nằm trong namespace System.Collections

Các thuộc tính:

- Count : trả về số phần tử hiện được lưu trữ trên Stack

- IsSyncronized: trả về một trị bool cho biết liệu xem việc truy xuất Stack có đồng bộ hay không?

- SyncRoot: trả về một đối tượng có thể được dùng đồng bộ hóa việc truy xuất stack

Các phương thức:

- Clear: gỡ bỏ tất cả các phần tử từ stack

- Clone: tạo một bản sao của stack

- Contains: xác định xem 1 phần tử có nằm trên stack hay không?

- CopyTo: sao các phần tử của stack hoặc 1 phần tử của nó lên mảng 1 chiều khởi đi từ một chỉ số chỉ định

- Peek: trả đối tượng về đầu hàng nối đuôi Stack không gỡ bỏ nó đi

- Pop: gỡ bỏ và trả về 1 đối tượng về đầu hàng của stack

- Push: thêm 1 đối tượng vào đầu hàng stack

- ToArray: copy các phần tử của stack qua một bản dãy mới

Để hiểu hơn về stack, chúng ta sẽ xem qua 2 ví dụ sau: (ứng dụng dạng console)

Ví dụ 1 :
Code:
1. using System;   
   2. using System.Collections;   
   3. public class SamplesStack   
   4. {   
   5.     public static void Main()   
   6.     {   
   7.         // tạo một thể hiện của lớp Stack là myStack.   
   8.         Stack myStack = new Stack();   
   9.         myStack.Push("Hello"); // nhét chữ “Hello” vào stack   
  10.         myStack.Push("World"); // nhét chữ “World” vào stack   
  11.         myStack.Push("!");// ‘’ chữ “!” vào stack   
  12.         // Hiển thị thuộc tính và giá trị của stack   
  13.         Console.WriteLine( "myStack" );   
  14.         Console.WriteLine( "\tCount: {0}", myStack.Count ); // in ra số phần //tử của stack   
  15.         Console.Write( "\tValues:" );   
  16.         PrintValues( myStack ); // hàm PrintValues sẽ in ra các giá trị trong stack   
  17.     }   
  18.     public static void PrintValues( IEnumerable myCollection ) //xây dựng //hàm in các giá trị trong stack   
  19.     {   
  20.         foreach ( Object obj in myCollection )   
  21.         Console.Write( " {0}", obj );   
  22.         Console.WriteLine();   
  23.     }   
  24. }

Kết quả sẽ xuất ra màn hình console dòng chữ:

myStack
Count: 3
Values: ! World Hello

Ví dụ 2:
Code:
1. using System;   
   2. using System.Collections;   
   3. using System.Collections.Generic;   
   4. using System.Text;   
   5. namespace ConsoleApplication1   
   6. {   
   7.     class Program   
   8.     {   
   9.         public static void InGiaTri(IEnumerable myCollection)   
  10.         {   
  11.             IEnumerator myEnumerator = myCollection.GetEnumerator();   
  12.             while (myEnumerator.MoveNext())   
  13.                 Console.WriteLine("{0} ", myEnumerator.Current);   
  14.             Console.WriteLine();   
  15.         }   
  16.         static void Main(string[ args)   
  17.         {   
  18.             Stack myStack = new Stack(); // khởi tạo 1 thể hiện của stack   
  19.             for (int i = 0; i < 8; i++) // đẩy 8 giá trị nguyên vào stack   
  20.                 myStack.Push(i * 9);   
  21.             Console.WriteLine("Cac tri trong myStack:\t");   
  22.             InGiaTri(myStack); //in ra các giá trị trong stack   
  23.             //đẩy 1 phần tử ra khỏi stack   
  24.             Console.WriteLine("\nDa day ra\t{0}", myStack.Pop());   
  25.             //cho hiển thị nội dung của myStack sau khi đẩy 1 phần tử   
  26.             Console.WriteLine("Cac gia tri trong myStack:\t");   
  27.             InGiaTri(myStack);   
  28.             //đẩy tiếp một phần tử nữa ra khỏi stack   
  29.             Console.WriteLine("\nDa day ra\t{0}", myStack.Pop());   
  30.             //cho hiển thị nội dung của myStack sau khi đẩy 1 phần tử   
  31.             Console.WriteLine("Cac gia tri trong myStack:\t");   
  32.             InGiaTri(myStack);   
  33.             //xem phần tử đầu tiên, lưu ý là mình không muốn đẩy nó khỏi stack   
  34.             Console.WriteLine("Peek:\t{0}", myStack.Peek());   
  35.             //cho hiển thị nội dung của myStack sau khi xem phần tử   
  36.             Console.WriteLine("Cac gia tri trong myStack:\t");   
  37.             InGiaTri(myStack);   
  38.             //khai báo 1 mảng chứa 12 phần tử   
  39.             Array myArray = Array.CreateInstance(typeof(int), 12);   
  40.             //gán giá trị cho mảng   
  41.             for (int i = 0; i < myArray.Length; i++)   
  42.                 myArray.SetValue(100 * i, i);   
  43.             //xem các giá trị trong mảng   
  44.             Console.WriteLine("Mang cua toi:");   
  45.             InGiaTri(myArray);   
  46.             //chép nội dung của myStack lên myArray   
  47.             //đi từ chỉ số 6   
  48.             myStack.CopyTo(myArray, 6);   
  49.             //cho tui xem giá trị của mảng lúc này   
  50.             Console.WriteLine("Mang sau khi duoc sao chep tu stack:");   
  51.             InGiaTri(myArray);   
  52.             Console.ReadLine();   
  53.         }   
  54.     }   
  55. }
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Thanks anh nhiều
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng