Stack trong C#

Khóa học lập trình C# nâng cao

5.0 (2 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 22:34 26-07-2020 51.985 lượt xem 2 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

Stack trong C#

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về SORTEDLIST TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về Stack trong C#.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Stack là gì?
  • Một số thuộc tính và phương thức hỗ trợ sẵn trong Stack.

Stack là gì?

Stack (hay còn gọi là ngăn xếp) là một cấu trúc dữ liệu hoạt động theo nguyên lý LIFO (Last In First Out). Người ta hay gọi nó là ngăn xếp bởi vì nó hoạt động giống như ngăn xếp trong thực tế vậy.

Giả sử bạn xếp chồng các chiếc đĩa lên nhau như hình dưới:

Stack trong C#,Push ,Pop ,ToArray,Peek,Contains ,CopyTo

Khi đó chiếc đĩa được xếp đầu tiên sẽ nằm dưới cùng và chiếc đĩa được xếp sau cùng sẽ nằm trên đầu. Nếu bạn muốn lấy đĩa ra sử dụng chắc chắn bạn sẽ lấy chiếc đĩa nằm trên cùng ra. Đây chính là nguyên lý Last In First Out (vào cuối ra đầu) của Stack.

Quay lại vấn đề lập trình, bạn tưởng tượng cả chồng đĩa đó chính là 1 danh sách (Stack), các chiếc đĩa là các phần tử của danh sách. Thế là ta đã có cấu trúc dữ liệu Stack trong lập trình rồi đó.

Trong C#, Stack là một Collections đại diện cho một danh sách hoạt động theo nguyên lý LIFO đã trình bày ở trên.

Vì C# đã hỗ trợ sẵn cấu trúc dữ liệu Stack rồi nên chúng ta chỉ tìm hiểu cách sử dụng nó thôi. Còn cách tổ chức nó như thế nào sẽ được trình bày trong serial về CẤU TRÚC DỮ LIỆU & GIẢI THUẬT.


Đặc điểm của Stack

  • Là một danh sách lưu trữ các đối tượng nhưng không thể truy cập các phần tử thông qua chỉ số phần tử được.
  • Hành động thêm phần tử vào Stack được gọi là Push (đẩy vào).
  • Hành động lấy phần tử ra khỏi Stack được gọi là Pop (đẩy ra). Và luôn luôn lấy ra phần tử được thêm vào cuối cùng.

Do Stack cũng là 1 Collections nên để sử dụng ta cần thêm thư viện System.Collections bằng câu lệnh:

using System.Collections;

Trước khi sử dụng ta cần khởi tạo vùng nhớ bằng toán tử new:

// khởi tạo 1 Stack rỗng
Stack MyStack = new Stack();

Bạn cũng có chỉ định sức chứa (Capacity) ngay lúc khởi tạo bằng cách thông qua constructor được hỗ trợ sẵn:

// khởi tạo 1 Stack và chỉ định sức chứa ban đầu là 5
Stack MyStack = new Stack(5); 

Bạn cũng có thể khởi tạo 1 Stack chứa các phần tử được sao chép từ một danh sách khác:

// khởi tạo 1 mảng bất kỳ
ArrayList MyArray = new ArrayList();
MyArray.Add(5);
MyArray.Add(9);
MyArray.Add(10);

// Khởi tạo 1 Stack và sao chép giá trị của các phần tử từ MyArray vào Stack.
Stack MyStack3 = new Stack(MyArray);

Một số thuộc tính và phương thức hỗ trợ sẵn trong Stack

Một số thuộc tính thông dụng trong Stack:

TÊN THUỘC TÍNH 

Ý NGHĨA

Count

  Trả về 1 số nguyên là số phần tử hiện có trong Stack.

Một số phương thức thông dụng trong Stack:

TÊN PHƯƠNG THỨC

Ý NGHĨA

  Clear()

  Xoá tất cả các phần tử trong Stack.

  Clone()

  Tạo 1 bản sao từ  Stack hiện tại.

  Contains (object Value)

  Kiểm tra đối tượng Value có tồn tại trong Stack hay không.

  CopyTo(Array array, int Index)

  Thực hiện sao chép tất cả phần tử trong Stack sang mảng một chiều array
  từ vị trí Index của array.

 Peek()

  Trả về giá trị của đối tượng tại vị trí trên cùng trong Stack (phần tử thêm vào cuối cùng)
  nhưng không xoá phần tử khỏi Stack.

  Pop()

  Trả về giá trị của đối tượng tại vị trí trên cùng trong Stack(phần tử thêm vào cuối cùng)
  đồng thời xoá phần tử khỏi Stack.

  Push(object Value)

  Thêm một phần tử có giá trị Value vào vị trí trên cùng trong Stack.

  ToArray()

  Tạo ra 1 mảng các object chứa tất cả các phần tử trong Stack và trả về mảng đó.


Một ví dụ đơn giản về sử dụng Stack

// Tạo 1 Stack rỗng
Stack MyStack4 = new Stack();

// Thực hiện thêm vài phần tử vào Stack thông qua hàm Push.
MyStack4.Push("Education");
MyStack4.Push("Free");
MyStack4.Push("HowKteam");

// Thử sử dụng các phương thức của Stack.
Console.WriteLine(" So phan tu hien tai cua Stack la: {0}", MyStack4.Count);

// Lưu ý ở đây ta chỉ muốn xem giá trị mà không muốn nó khỏi Stack thì ta sẽ dùng Peek.
Console.WriteLine(" Phan tu dau cua Stack la: {0}", MyStack4.Peek());

// Thử kiểm tra lại số phần tử để chắc chắn rằng hàm Peek không xoá phần tử ra khỏi Stack.
Console.WriteLine(" So phan tu cua Stack sau khi goi ham Peek: {0}", MyStack4.Count);

// Thực hiện xoá các phần tử ra khỏi Stack.
Console.WriteLine(" Popping...");
int Length = MyStack4.Count;
for (int i = 0; i < Length; i++)
{
    Console.Write(" " + MyStack4.Pop());
}
Console.WriteLine();

// Kiểm tra lại số phần tử của Stack sau khi Pop
Console.WriteLine(" So phan tu cua Stack sau khi Pop la: {0}", MyStack4.Count);

Kết quả: khi chạy đoạn chương trình trên

Stack trong C#,Push ,Pop ,ToArray,Peek,Contains ,CopyTo


Kết luận

Nội dung bài này giúp các bạn nắm được:

  • Stack là gì?
  • Một số thuộc tính và phương thức hỗ trợ sẵn trong Stack.

Bài học sau chúng ta sẽ cùng tìm hiểu về QUEUE TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Stack trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C# nâng cao

Bạn đã học hết các khoá học về C# CƠ BẢN, LẬP TRÌNH WINFORM thậm chí là LẬP TRÌNH WPF nhưng vẫn bối rối trước những hướng dẫn về CÁC PROJECT THỰC TẾ của Kteam?

Hoặc bạn nghe nói mãi về .NET nhưng vẫn thắc mắc nó có gì hay ho bên trong đó?

Hay đơn giản bạn viết muốn 1 đoạn code cực kỳ nguy hiểm khiến người khác khi nhìn vào phải thốt lên: “Ồ!!!......... Trẻ trâu…”

Khoá học lần này sẽ giúp bạn giải đáp những thắc mắc trên. Chào mừng các bạn đã đến với khoá học Lập trình C# nâng cao của Kteam.

Đánh giá

Mr.ATM đã đánh giá 15:01 05-11-2021

huynh140 đã đánh giá 17:23 12-10-2021

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
hiamkien đã bình luận 21:41 16-09-2021

serial về CẤU TRÚC DỮ LIỆU & GIẢI THUẬT ở khóa học nào sao em k tìm thấy ạ ?

 

boruto6677 đã bình luận 21:19 07-09-2019

ad ơi cho e hỏi ứng dụng thực tế của stack sẽ là gì ạ?

Không có video.