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: Stack, công dụng và cách sử dụng ngăn xếp như thế nào???

  1. #1
    Ngày gia nhập
    05 2009
    Bài viết
    2

    Question Stack, công dụng và cách sử dụng ngăn xếp như thế nào???

    Cái môn này mình cũng mù mờ ko hiểu cho lắm vì mới vừa học tới.
    Mình có 1 bài tập có đề như sau:
    "Trừ 2 đa thức, lưu trữ bằng Stack "
    Mình tham khảo được một đoạn code trừ 2 đa thức như sau nhưng chẳng hiểu nó lưu trữ Stack là như thế nào, ai có thể giải thích giúp mình với!
    PHP Code:
    **** 
    Đã được chỉnh sửa lần cuối bởi toingheo : 16-05-2009 lúc 11:39 AM.

  2. #2
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Bó tay, copy dc đâu ra đoạn code thấy nó giống phần "Trừ 2 đa thứ" thì nghĩ nó cũng "lưu trữ bằng Stack" y chang như đề bài luôn ah =))
    Đúng là copy mù quáng mà chả hiểu khỉ gì hết. Tốt nhất là nên ráng tự làm đi.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    6

    file lý thuyết nè.bạn tham khảo đi
    Attached Files Attached Files

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

    mình cũng mới học về Stack,ko hiểu nhiều lắm nhưng đoạn code của bạn chỉ thấy giống mỗi đề bài ở chỗ trừ 2 đa thức thôi .Tốt nhất nên học qua đi đã rồi hãy hỏi.Trong diễn đàn nhiều bài về Stack và Queue lắm. Tham khảo nhé
    Đã được chỉnh sửa lần cuối bởi cun : 15-05-2009 lúc 10:53 PM.

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

    tụi mình đều đang quan tâm đến stack song chỉ mới hiểu bài chứ chưa biết cài đặt.anh nào cài đặt bài này bằng liên kết đơn,ngôn ngữ C.
    tính biểu thức:
    3+4*2/(1-5)
    cảm ơn mấy anh
    Đã được chỉnh sửa lần cuối bởi peng : 14-05-2009 lúc 10:38 PM.

  6. #6
    Ngày gia nhập
    05 2009
    Nơi ở
    TPHCM
    Bài viết
    12

    Mặc định Stack, công dụng và cách sử dụng ngăn xếp như thế nào???

    Stack là 1 tập động mà các thao tác chèn xóa thực hiện theo nguyên tắc LIFO (Last In First Out), cái gì vào cuối cùng sẽ được đưa ra trước.

    ví dụ như ở bài toán Tháp Hà Nội đấy, cái đĩa ở trên cùng sẽ được lấy ra trước, và các trục đó bạn hãy hiểu như là 1 Stack để chứa các Đĩa. vậy thôi. Nếu dùng Stack của Trình Biên Dịch luôn thì bài làm của tháp Hà Nội ngắn đi rất nhiều nhưng không hay, không hay ko phải là do cái đĩa chuyển đi không được, mà là ở chỗ sữ dụng stack trong những bài toán khác. Ví dụ như bài toán hậu tố đi: vầy nhá: Hậu tố là toán tử đứng sau toán hạng : 2 3 +; còn trung tố thì toán tử sẽ ở giữa : 2+3. vậy đấy.

    Nếu như ta dùng Stack trong bài toán Hậu tố thì chúng ta hình dung như thế này:

    duyệt từ đầu đến cuối mảng (mảng này gồm các toán tử và toán hạng do người dùng nhập vào) mảng ở đây là 1 biểu thức hậu tố: 2 3 +. thì gặp toán hạng 2, đưa 2 vào Stack (2 nằm dưới cùng) gặp toán hạng 3, đưa 3 vào Stack (3 nằm trên 2) đến khi gặp toán tử thì chúng ta lấy 2 toán hạng đã ở trong Stack ra lại và ta tổ chức theo thứ tự ta sẽ được kết quả như tính bình thường. nếu như biểu thức dài hơn thì Stack là 1 phương pháp rất hay để giải quyết VD: 5 2 3 + -....

    Có thể bạn đã hiểu phần nào về Stack rùi.

    Stack nói chung chỉ là 1 Class mà thôi, và class đó chúng ta đặt tên cho nó là Stack ( Đặt tên là Nguyen cũng được nhưng Stack cho hợp chương trình mà thôi), nó được định nghĩa để quản lí vấn đề về Ngăn Xếp (Stack), khi đó bạn chỉ cần quan tâm đến 2 vấn đề chính là: đưa Phần tử vào trong Stack (Stack_Push) và Lấy phần tử ra khỏi Stack (Stack_Pop), nhưng kèm theo còn có 2 vấn đề là kiểm tra Stack rỗng (Stack_Empty) và Stack đầy (Stack_Full). Còn vấn đề định nghĩa các toán tử thì từ từ quan tâm vì thực ra theo một người bạn của mình (cũng là dân lập trình thứ dữ) nói rằng nó chỉ để cho đẹp mà thôi. Giờ ta sẽ xem Code của Stack, nên nhớ rằng bản thân Stack không là gì cả, nhưng nó rất quan trọng trong các bài toán mà nó cần có mặt.

    C++ Code:
    1. #include <iostream.h>
    2.  
    3.  
    4. class Stack
    5. {
    6. private:
    7.     int *stack;
    8.     int p,   // số phần tử hiện hành (là số phần tử ta đang sử dụng)
    9.              max;   // số phần tử tối đa ta có thể dùng
    10. public:
    11.     Stack(int);
    12.  
    13.     void Push(int);
    14.     int top();
    15.     void Pop();
    16.  
    17.     bool isEmpty(); //ở trên mình nói là Stack_Empty
    18.     bool isFull();     //ở trên mình nói là Stack_Full
    19. };
    20. Stack::Stack(int n)
    21. {
    22.     max=n;
    23.     stack = new int[max];
    24.     p=-1;
    25. }
    26. bool Stack::isEmpty()
    27. {
    28.     if(p==-1)
    29.         return true;
    30.     return false;
    31. }
    32. bool Stack::isFull()
    33. {
    34.     if(p==max-1)
    35.         return true;
    36.     return false;
    37. }
    38. void Stack::push(int value)
    39. {
    40.     if(p+1 < max)
    41.         stack[++p] = value;
    42. }
    43. int Stack::top() // constructor = phương thức thiết lập cho Stack
    44. {
    45.     return stack[p];
    46. }
    47. void Stack::pop()
    48. {
    49.     if(p-1 >= -1)
    50.         p--;
    51. }
    52.  
    53. void main()
    54. {
    55. ////////// DEMO /////////////
    56.     Stack S(5);
    57.    
    58.     if(S.isEmpty()) cout<<"\n Rong \n";
    59.  
    60.     S.push(1);
    61.     S.push(2);
    62.     S.push(3);
    63.     S.push(4);
    64.     S.push(5);
    65.  
    66.     if(S.isFull()) cout<<"\n Het cho";
    67.     cout<<"\n\n";
    68.     while(!S.isEmpty())
    69.     {
    70.         cout<<S.top()<<" ";
    71.         S.pop();
    72.     }
    73.    
    74.     cout<<"\n\n";
    75.  
    76. }
    trên đây chỉ là Demo mà thôi, có gì thì mình sẽ giải thích thêm theo hướng hiểu biết của mình, mình dùng C++


    Bỏ code vào tag code... zkday
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 21-05-2009 lúc 11:24 PM.

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

    thanks anh LCNguyen.để em làm thử phần định nghĩa toán tử đã nhưng gặp nguy rồi.thi tới nơi rồi.phần định nghĩa toán tử nguy cơ quá

  8. #8
    Ngày gia nhập
    05 2009
    Bài viết
    2

    Cái ông Lugia ni bị điên à! tui mà hiểu mấy cái quái này thì hỏi làm dek gì!

    Rất cám ơn LCNguyen, mình cũng hiểu ra nó rồi... hóa ra cũng đơn giản. Chẳng khó khăn như lúc chưa hiểu. Mình ko biết nhiều về C++, mắc công làm xong ông thầy hỏi thì chẳng biết đường nào mà trả lời, nên mình sẽ làm bằng ngôn ngữ khác dựa theo bài DEMO của cậu. Thanks!

  9. #9
    Ngày gia nhập
    05 2009
    Nơi ở
    TPHCM
    Bài viết
    12

    Phần định nghĩa toán tử thì theo mình nghĩ tùy bài toán nữa peng à. Bạn cố gắng tham khảo thêm tài liệu của các bậc đàn anh đi trước xem sao nha. có thể bạn sẽ giỏi hơn các bậc đàn anh đấy. Chúc bạn thành công!!!

  10. #10
    Ngày gia nhập
    05 2009
    Nơi ở
    da nang
    Bài viết
    61

    mình muốn cộng trừ nhân chia các phần tử trên stack thì làm thế nào

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

  1. Xây dựng lớp stack cho ngăn xếp kiểu int
    Gửi bởi hoaxuyenchi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 03-10-2013, 11:12 AM
  2. Bài tập C Sửa lỗi bài chuyển hệ cơ số 10 sang hệ cơ số 2 bằng cách sử dụng ngăn xếp (stack)
    Gửi bởi nguoimoihoc 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: 08-09-2013, 09:16 PM
  3. Bài tập đảo chuỗi bằng phương pháp ngăn xếp Stack
    Gửi bởi sieuthi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 19-02-2011, 05:07 PM
  4. 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
  5. Nhược điểm của ngăn xếp stack trên C?
    Gửi bởi gianghien1404 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 26
    Bài viết cuối: 24-07-2010, 12:45 PM

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