Cài đặt Stack bằng mảng một chiều – Freetuts

Trong hướng dẫn này mình sẽ trình làng những bạn cách để tạo Stack bằng mảng một chiều. Ở bài trước tất cả chúng ta đã tìm hiểu và khám phá cách cài đặt Stack bằng danh sanh link rồi. Đây là hai cách cơ bản nhất để hoàn toàn có thể cài đặt Stack .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Chúng ta sẽ lần lượt thực hiện tạo các hàm cơ bản cho Stack như: isEmpty(), isFull(), push(), top(), pop(). Đây là các hàm cơ bản nhưng rất cần thiết cho Stack, hầu hết khi làm việc với Stack cần phải có các hàm này.

1. Hàm isEmpty và isFull

Trước khi tạo các hàm isEmpty()isFull() để kiểm tra Stack rỗng hay đầy thì ta phải tạo một số biến cơ bản cần sử dụng trong Stack:

  • curren_size: chúng ta sẽ khởi tạo cho nó bằng -1, đây là size hiện tại của Stack.
  • MAX_SIZE: chúng ta sẽ khởi tạo cho nó bằng 100, đây là size tối đa của Stack.
  • stack[MAX_SIZE]: đây là một mảng stack với số phần tử tối đa là MAX_SIZE.
/* tạo các biến cơ bản */
//tạo size hiện tại và khởi tạo cho nó bằng -1
int curren_size = -1;
//tạo một hằng số làm size max = 100
const int MAX_SIZE = 100;
//tạo một mảng stack với số phần tử bằng max
int stack[MAX_SIZE];

Hàm isEmpty

Hàm kiểm tra Stack có sống sót thành phần hay không là một hàm rất quan trọng. Vì khi muốn triển khai những thao tác như xóa so với Stack ta cần biết được trong Stack có sống sót thành phần hay không, nếu không sống sót thì ta không hề xóa thành phần trong Stack được .
Để kiểm tra Stack rỗng hay không rất đơn thuần, vì lúc đầu ta đã khởi tạo cho biến curren_size = – 1, vậy nên ta chỉ cần kiểm tra nếu curren_size = – 1 thì tức là trong Stack chưa có gì, khi đó ta chỉ cần return và kết thúc hàm .

/* kiểm tra stack rỗng */
bool isEmpty(){
  //kiểm tra nếu curren_size == -1 thì return và kết thúc hàm
  return (curren_size == -1);
}

Hàm isFull

Tương tự như hàm kiểm tra Stack rỗng hay không, việc kiểm tra Stack đã đầy hay chưa cũng rất quan trọng. Vì khi muốn thêm một thành phần nào đó vào Stack ta cần biết được trong Stack còn chỗ trống hay là không, nếu Stack đã đầy thì ta không hề thêm thành phần vào Stack được .
Để kiểm tra Stack đã đầy hay chưa ta chỉ cần kiểm tra nếu curren_size = = MAX_SIZE thì ra return rồi kết thúc hàm .

/* kiểm tra stack đầy */
bool isFull(){
  //kiểm tra neeys curren_size == MAX_SIZE thì return và kết thúc hàm
  return (curren_size == MAX_SIZE);
}

2. Hàm Push

Sau khi đã tạo những hàm điều kiện kèm theo isEmpty ( ) và isFull ( ) ta sẽ mở màn thực thi tạo hàm thêm thành phần vào Stack. Nếu không có tài liệu ta không hề triển khai những thao tác khác trên Stack được, vì thế đây là một bước cũng khá quan trọng .
Như đã nói thì để hoàn toàn có thể thêm một thành phần vào Stack thì trong Stack vẫn còn chỗ trống, vì thế thứ nhất ta cần sử dụng hàm isFull ( ) để kiểm tra xem Stack đã đầy hay chưa, nếu chưa đầy thì ta mới triển khai những câu lệnh .

  • Tăng curren_size lên để tạo thêm chỗ trống trong stack để thêm phần tử mới vào.
  • Gán data vào vị trí curren_size trong Stack.

Nếu trong Stack đã đầy thì thông báo Stack đã đầy và kết thúc hàm.

/* hàm thêm phần tử vào Stack */
void push(int data){
  //việc đầu tiên ta kiểm tra xem stack đã đầy hay chưa, nếu chưa tha thực hiện:
  if(!isFull()){
    //tăng curren_size lên để tạo thêm chổ trống trong stack để thêm phần tử mới vào
    curren_size++;
    //sau đó gán data vào đúng vị trí curren_size trong stack
    stack[curren_size] = data;
  }
  //ngược lại nếu trong stack đã đầy thì thông báo cho người dùng biết rằng stack đã đầy
  else{
    cout<<"Stack đã đầy !!"<

3. Hàm Top

Hàm top ( ) là một hàm lấy giá trị ở trên đầu ( top ) trong Stack nhưng không xóa nó khỏi Stack, giống như ta chỉ xem thành phần đầu thôi chứ không xóa nó . Việc tiên phong ta sẽ kiểm tra xem Stack có sống sót thành phần hay không, nếu Stack có tôn tại thành phần thì ta khởi đầu thực thi những câu lệnh :
  • Gán giá trị ở vị trí curren_size cho biến data.
  • Return giá trị data
trái lại nếu trong Stack rỗng thì thông tin và kết thúc hàm .
/* lấy phần tử ở top nhưng không xóa nó khỏi stack */
int top(){
  //kiểm tra xem stack có rỗng hay không, nếu không ta thực hiện:
  if(!isEmpty()){
    //gán giá trị ở vị trí curren_size cho biến data
    int data = stack[curren_size];
    //sau đó return data
    return data;
  }
  //ngược lại nếu stack rỗng thì thông báo cho người dùng biết stack rỗng
  else{
    cout<<"Stack rỗng !!"<

4. Hàm Pop

Tương tự như hàm top ( ), hàm pop ( ) cũng có trách nhiệm là lấy thành phần trên cùng ( top ) trong Stack nhưng đồng thời sẽ xóa nó khỏi Stack. Đây là điểm khác nhau giữa hai hàm lấy thành phần này . Ta cũng sẽ phải kiểm tra xem Stack có sống sót thành phần hay không, nếu có sống sót thành phần thì ta thực thi những câu lệnh :
  • Gán giá trị ở vị trí curren_size cho biến data.
  • Giảm curren_size đi vì hàm pop() sau khi lấy sẽ xóa phần tử đó khỏi Stack.
  • Return giá trị data
trái lại nếu Stack rỗng thì thông tin và kết thúc hàm .
/*lấy phần tử ở top và xóa nó khỏi stack*/
int pop(){
  //kiểm tra xem stack có rỗng hay không, nếu không ta thực hiện:
  if(!isEmpty()){
    //gán giá trị ở vị trí curren_size cho biến data
    int data = stack[curren_size];
    //giảm curren_size đi vì hàm pop() sau khi lấy sẽ xóa phần tử đó khỏi stack
    curren_size--;
    //sau đó return data
    return data;
  }
  //ngược lại nếu stack rỗng thì thông báo cho người dùng biết stack rỗng
  else{
    cout<<"Stack rỗng !!"<

5. Ví dụ xây dựng một cấu trúc Stack hoàn chỉnh

Trong ví dụ này mình sẽ triển khai tạo một mảng stack [ ] là những số nguyên, sau đó thêm một số ít thành phần sẵn trong Stack. Mình sẽ thực thi những thao tác như hiển thị giá trị trên cùng, xóa giá trị trên cùng trong Stack. Các bạn có thể thao khảo code dưới đây, trong đó mình có chú thích cho những bạn dễ hiểu .

Full code:

#include 
using namespace std;
/* tạo các biến cơ bản */
//tạo size hiện tại và khởi tạo cho nó bằng -1
int curren_size = -1;
//tạo một hằng số làm size max = 100
const int MAX_SIZE = 100;
//tạo một mảng stack với số phần tử bằng max
int stack[MAX_SIZE];

/* kiểm tra stack rỗng */
bool isEmpty(){
  //kiểm tra nếu curren_size == -1 thì return và kết thúc hàm
  return (curren_size == -1);
}

/* kiểm tra stack đầy */
bool isFull(){
  //kiểm tra neeys curren_size == MAX_SIZE thì return và kết thúc hàm
  return (curren_size == MAX_SIZE);
}

/* hàm thêm phần tử vào Stack */
void push(int data){
  //việc đầu tiên ta kiểm tra xem stack đã đầy hay chưa, nếu chưa tha thực hiện:
  if(!isFull()){
    //tăng curren_size lên để tạo thêm chổ trống trong stack để thêm phần tử mới vào
    curren_size++;
    //sau đó gán data vào đúng vị trí curren_size trong stack
    stack[curren_size] = data;
  }
  //ngược lại nếu trong stack đã đầy thì thông báo cho người dùng biết rằng stack đã đầy
  else{
    cout<<"Stack đã đầy !!"<> lc;
        switch(lc){
            case 0: break;
            case 1: 
              cout<<"Phần tử đầu tiên trong Stack: "<

Kết quả: Mình đã khởi tạo sẵn các giá trị 10, 11, 12, 13, 14, 15, 16 trong Stack.

stack mang PNG

6. Kết luận

Như vậy là tất cả chúng ta đã tìm hiểu và khám phá xong cách cài đặt Stack bằng mảng một chiều, những bạn hãy nắm rõ cách cài đặt Stack bằng cả mảng và cả list link nhé. Vì mỗi bài toán ta cần sử dụng một cấu trúc tàng trữ khác nhau, vậy nên hãy sử dụng nó một cách linh động. Ở những bài tiếp theo mình sẽ vận dụng Stack để giải 1 số ít bài toán cơ bản trong C + +, những bạn hãy chú ý quan tâm theo dõi nhé ! ! !