Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Tìm hiểu về stack trong lập trình C#

  1. #1
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Cool Tìm hiểu về stack trong lập trình C#

    BÀN VỀ STACK TRONG C#
    Stack là gì nhỉ? À ừm, theo nghĩa tiếng Anh nó có nghĩa là “đống”, hi,dịch vậy thì hơi ngố bạn nhỉ? 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 còn mài đũng quần để 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à xài thông qua class Stack nằm trong namespace System.Collections
    Sau đây là các thuộc tính và phương thức thông dụng của class Stack:
    Code:
      PUBLIC PROPERTIES – CÔNG DỤNG
      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
       
      PUBLIC METHODS-CÔNG DỤNG
      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ẽ rảo qua 2 ví dụ sau: (ứng dụng dạng console)
    Ví dụ 1 (lấy từ MSDN)
    Code:
     
      using System;
      using System.Collections;
      public class SamplesStack  
      {
       
         public static void Main()  
        {
       
            // tạo một thể hiện của lớp Stack là myStack.
            Stack myStack = new Stack();
            myStack.Push("Hello"); // nhét chữ “Hello” vào stack
            myStack.Push("World"); // nhét chữ “World” vào stack
            myStack.Push("!"); ‘’ chữ “!” vào stack
       
            // Hiển thị thuộc tính và giá trị của stack
            Console.WriteLine( "myStack" );
            Console.WriteLine( "\tCount:    {0}", myStack.Count ); // in ra số phần //tử của stack
            Console.Write( "\tValues:" );
            PrintValues( myStack ); // hàm PrintValues sẽ in ra các giá trị trong stack
         }
       
         public static void PrintValues( IEnumerable myCollection )  //xây dựng //hàm in các giá trị trong stack
        {
            foreach ( Object obj in myCollection )
               Console.Write( "    {0}", obj );
            Console.WriteLine();
         }
       
      }
      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:
      using System;
      using System.Collections;
      using System.Collections.Generic;
      using System.Text;
      
      namespace ConsoleApplication1
      {
          class Program
          {
              public static void InGiaTri(IEnumerable myCollection)
              {
                  IEnumerator myEnumerator = myCollection.GetEnumerator();
                  while (myEnumerator.MoveNext())
                      Console.WriteLine("{0} ", myEnumerator.Current);
                  Console.WriteLine();
              }
              static void Main(string[] args)
              {
                  Stack myStack = new Stack(); // khởi tạo 1 thể hiện của stack
                  for (int i = 0; i < 8; i++) // đẩy 8 giá trị nguyên vào stack
                      myStack.Push(i * 9);
                  Console.WriteLine("Cac tri trong myStack:\t");
                  InGiaTri(myStack); //in ra các giá trị trong stack
      
                  //đẩy 1 phần tử ra khỏi stack
                  Console.WriteLine("\nDa day ra\t{0}", myStack.Pop());
                  //cho hiển thị nội dung của myStack sau khi đẩy 1 phần tử
                  Console.WriteLine("Cac gia tri trong myStack:\t");
                  InGiaTri(myStack);
                  //đẩy tiếp một phần tử nữa ra khỏi stack
                  Console.WriteLine("\nDa day ra\t{0}", myStack.Pop());
      
                  //cho hiển thị nội dung của myStack sau khi đẩy 1 phần tử
                  Console.WriteLine("Cac gia tri trong myStack:\t");
                  InGiaTri(myStack);
      
                  //cho mình xem phần tử đầu tiên, lưu ý là mình không muốn đẩy nó khỏi stack
                  Console.WriteLine("Peek:\t{0}", myStack.Peek());
                  //cho hiển thị nội dung của myStack sau khi xem phần tử
                  Console.WriteLine("Cac gia tri trong myStack:\t");
                  InGiaTri(myStack);
      
                  //khai báo 1 mảng chứa 12 phần tử
                  Array myArray = Array.CreateInstance(typeof(int), 12);
                  //gán giá trị cho mảng
                  for (int i = 0; i < myArray.Length; i++)
                      myArray.SetValue(100 * i, i);
                  //cho tui xem các giá trị trong mảng
                  Console.WriteLine("Mang cua toi:");
                  InGiaTri(myArray);
      
                  //chép nội dung của myStack lên myArray
                  //đi từ chỉ số 6
                  myStack.CopyTo(myArray, 6);
      
                  //cho tui xem giá trị của mảng lúc này
                  Console.WriteLine("Mang sau khi duoc sao chep tu stack:");
                  InGiaTri(myArray);
                  Console.ReadLine();
              }
          }
      }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Chả thấy khác gì Java nhưng C# mạnh hơn *_*

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Rát cảm ơn vì mình đang cần

  4. #4
    Ngày gia nhập
    12 2008
    Nơi ở
    Bình Dương
    Bài viết
    114

    không biết Stack này được cài đặt bằng Array hay List vậy ta?

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    18

    Đổi sang hệ thập lục phân
    Code:
    long sothapphan = Convert.ToInt64(lblHienThi1.Text.Trim());
                        lblHienThi1.Text = "";
                        Stack stack1 = new Stack();
                        do
                        {
    
                            stack1.Push(sothapphan % 16);
                            sothapphan = sothapphan / 16;
    
                        } while (sothapphan > 0);
                        int count = stack1.Count;
                        while (count > 0)
                        {
                            int a = Convert.ToInt32(stack1.Pop().ToString());
                            switch (a)
                            {
                                case 0: lblHienThi1.Text += 0; break;
                                case 1: lblHienThi1.Text += 1; break;
                                case 2: lblHienThi1.Text += 2; break;
                                case 3: lblHienThi1.Text += 3; break;
                                case 4: lblHienThi1.Text += 4; break;
                                case 5: lblHienThi1.Text += 5; break;
                                case 6: lblHienThi1.Text += 6; break;
                                case 7: lblHienThi1.Text += 7; break;
                                case 8: lblHienThi1.Text += 8; break;
                                case 9: lblHienThi1.Text += 9; break;
                                case 10: lblHienThi1.Text += "A"; break;
                                case 11: lblHienThi1.Text += "B"; break;
                                case 12: lblHienThi1.Text += "C"; break;
                                case 13: lblHienThi1.Text += "D"; break;
                                case 14: lblHienThi1.Text += "E"; break;
                                case 15: lblHienThi1.Text += "F"; break;
                                default: lblHienThi1.Text = "Không Thể Chuyển Đổi"; break;
                            }
                            count--;
                        }

  6. #6
    Ngày gia nhập
    04 2009
    Bài viết
    22

    Mặc định Tìm hiểu về stack trong lập trình C#

    hay lắm ,cám ơn @neverland rất nhiều

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    14

    Mặc định Hỏi về dùng thư viện stack trong C++2005

    mình định nghĩa
    struct Node
    {
    int value;
    Node *next;
    };
    sau đó mình khai bao thu viện #include<stack> và định nghĩa stack<Node>st(20); thì máy báo lỗi, làm sao định nghĩa một stack mà phần tử kiểu Node. thanks

  8. #8
    Ngày gia nhập
    09 2010
    Nơi ở
    Saigon City
    Bài viết
    22

    Trích dẫn Nguyên bản được gửi bởi hoangedward Xem bài viết
    không biết Stack này được cài đặt bằng Array hay List vậy ta?
    Bạn có thể download source code của C# mà xem thử nó cài đặt thế nào?
    Search với từ khóa: sscli
    Bạn sẽ tìm thấy.
    Bản chất tốt nhưng dòng đời xô đẩy.

  9. #9
    Ngày gia nhập
    04 2010
    Bài viết
    14

    Mặc định reply

    Thanks bạn! minh lam duoc roi

  10. #10
    Ngày gia nhập
    05 2012
    Bài viết
    4

    PHP Code:
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    namespace 
    console_doicoso16
    {
        class 
    Program
        
    {
            static 
    void Main(string[] args)
            {
                
    Console.Write("nhap so ");
                
    int sothapphan Convert.ToInt16(Console.ReadLine());
                
    Stack st = new Stack();
                do
                {
                    
    st.Push(sothapphan 16);
                    
    sothapphan sothapphan 16;
                } while (
    sothapphan 0);
                
    int count st.Count;
                while (
    count 0)
                {
                    
    int a Convert.ToInt16(st.Pop());
                    if (
    <= && <= 9Console.Write(a.ToString());                    
                    if (
    == 10Console.Write("A");
                    if (
    == 11Console.Write("B");
                    if (
    == 12Console.Write("C");
                    if (
    == 13Console.Write("D");
                    if (
    == 14Console.Write("E");
                    if (
    == 15Console.Write("F");

                    
    count--;
                }
                
    Console.ReadLine();
            }
        }

    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Các đề tài tương tự

  1. Bài tập C++ copy noi dung tu stack S sang stack D
    Gửi bởi thaodn_chuprong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 12
    Bài viết cuối: 18-10-2012, 11:45 PM
  2. Cấu trúc dữ liệu Chuyển các phần tử từ stack này sang stack kia như thế nào?
    Gửi bởi rukawa1184 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 9
    Bài viết cuối: 06-12-2011, 06:52 PM
  3. Stack, ngăn xếp - Thiết lập và ứng dụng stack trong C
    Gửi bởi PoPoPoPo trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 8
    Bài viết cuối: 15-11-2010, 11:24 PM
  4. Stack trên C | Lỗi khó hiểu trong Stack
    Gửi bởi tom3cang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-05-2009, 11:09 PM
  5. Code về stack | Chuyển hệ số 10 sang 2 dùng stack
    Gửi bởi ahappyboy89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 17-04-2009, 09:48 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn