Đề Xuất 5/2022 # Giới Thiệu Về Cấu Trúc Dữ Liệu Stack # Top Like

Xem 10,989

Cập nhật nội dung chi tiết về Giới Thiệu Về Cấu Trúc Dữ Liệu Stack mới nhất ngày 17/05/2022 trên website Comforttinhdauthom.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến nay, bài viết này đã thu hút được 10,989 lượt xem.

--- Bài mới hơn ---

  • Kiểu Dữ Liệu Set Trong Python
  • Cấu Trúc Dữ Liệu Deque
  • Cấu Trúc Dữ Liệu Và Giải Thuật: Ngăn Xếp (Stack) Trong Swift
  • – Giải Bài Tập Danh Sách Liên Kết: Quản Lí Sinh Viên
  • Bài 10. Dữ Liệu Có Cấu Trúc (Struct)
  • Chào ace, phần tiếp theo trong series tự học về cấu trúc dữ liệu và giải thuật đó là Stack, sau đây cafedev sẽ giới thiệu và chia sẻ chi tiết(khái niệm, độ phức tạp, ứng dụng…) về nó cho ace.

    1. Khái niệm về Stack

    Stack là một cấu trúc dữ liệu tuyến tính với các hoạt động được thực hiện theo một thứ tự cụ thể. Thứ tự có thể là LIFO (Last In First Out – vào sau lại ra trước) hoặc FILO (First In Last Out – vào đầu tiên nhưng ra lại sau cùng). Hiểu đơn giản hơn, Stack là ngăn xếp, bạn có thể tưởng tượng nó như một chồng sách và sách nào để lên sau cùng sẽ được lấy ra trước…

    Chủ yếu Stack có ba hàm cơ bản sau được thực hiện:

    • Push: Thêm một mục(phần tử, thành phần) trong stack. Nếu stack đầy, thì nó được cho là điều kiện Tràn.
    • Pop: Loại bỏ một mục khỏi stack. Các mục được xuất hiện theo thứ tự đảo ngược mà chúng được Push. Nếu stack trống, thì nó được cho là điều kiện trống.
    • Peek hoặc Top: Trả về phần tử trên cùng của stack.
    • isEmpty: Trả về true nếu stack trống, ngược lại là false.

    2. Cách hoạt động của một stack trong thực tế như thế nào?

    Có rất nhiều ví dụ thực tế về ngăn xếp. Hãy xem xét ví dụ đơn giản về những chiếc đĩa xếp chồng lên nhau trong căng tin. Đĩa ở trên cùng là đĩa đầu tiên được lấy ra, tức là đĩa được đặt ở vị trí dưới cùng vẫn nằm trong ngăn xếp trong khoảng thời gian dài nhất. Vì vậy, có thể thấy đơn giản, stack làm theo thứ tự LIFO / FILO. Cái đĩa nào vào trước sẽ ra sau cùng, hoặc cái nào vào sau cùng sẽ được lấy ra đầu tiên.

    3. Độ phức tạp của các hàm trong Stack

    push(), pop(), isEmpty() và peek() đều mất O(1) thời gian. Chúng ta không chạy bất kỳ vòng lặp nào trong bất kỳ hàm nào trong số này.

    4. Ứng dụng của Stack là gì?

    • Chuyển đổi Infix to Postfix
    • Tính năng undo(hoàn lại) ở nhiều nơi như chỉnh sửa, photoshop.
    • Tính năng chuyển tiếp và lùi trong trình duyệt web
    • Được sử dụng trong nhiều thuật toán như Tower of Hanoi, duyệt cây, bài toán nhịp cổ phiếu, bài toán biểu đồ.
    • Các ứng dụng khác có thể là Backtracking, Knight tour problem, N queen problem và sudoku solver
    • Trong các thuật toán đồ thị như Sắp xếp theo cấu trúc liên kết và các thành phần được kết nối mạnh mẽ

    5. Cách xây dựng một stack

    Có hai cách để triển khai và xây dựng một stack đó là:

    • Sử dụng mảng
    • Sử dụng danh sách liên kết

    5.1 Cài đặt Stack sử dụng mảng

    C

    // C program for array implementation of stack // A structure to repsent a stack struct Stack { int top; unsigned capacity; int* array; }; // function to create a stack of given capacity. It initializes size of // stack as 0 struct Stack* createStack(unsigned capacity) { struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack)); return stack; } // Stack is full when top is equal to the last index int isFull(struct Stack* stack) { } // Stack is empty when top is equal to -1 int isEmpty(struct Stack* stack) { } // Function to add an item to stack. It increases top by 1 void push(struct Stack* stack, int item) { if (isFull(stack)) return; printf("%d pushed to stackn", item); } // Function to remove an item from stack. It decreases top by 1 int pop(struct Stack* stack) { if (isEmpty(stack)) return INT_MIN; } // Function to return the top from stack without removing it int peek(struct Stack* stack) { if (isEmpty(stack)) return INT_MIN; } // Driver program to test above functions int main() { struct Stack* stack = createStack(100); push(stack, 10); push(stack, 20); push(stack, 30); printf("%d popped from stackn", pop(stack)); return 0; }

    C++

    /* C++ program to implement basic stack operations */ using namespace std; #define MAX 1000 class Stack { int top; public: int a = x; cout << x << " pushed into stackn"; return true; } } int Stack::pop() { if (top < 0) { cout << "Stack Underflow"; return 0; } else { int x = a; return x; } } bool Stack::isEmpty() { return (top < 0); } // Driver program to test above functions int main() { class Stack s; s.push(10); s.push(20); s.push(30); cout << s.pop() << " Popped from stackn"; return 0; }

    Java

    /* Java program to implement basic stack operations */ class Stack { static final int MAX = 1000; int top; int a; // Maximum size of Stack boolean isEmpty() { return (top < 0); } Stack() { top = -1; } boolean push(int x) { System.out.println("Stack Overflow"); return false; } else { a; return x; } } int peek() { if (top < 0) { System.out.println("Stack Underflow"); return 0; } else { int x = a) { Stack s = new Stack(); s.push(10); s.push(20); s.push(30); System.out.println(s.pop() + " Popped from stack"); } }

    Python

    # Python program for implementation of stack # import maxsize from sys module # Used to return -infinite when stack is empty from sys import maxsize # Function to create a stack. It initializes size of stack as 0 def createStack(): stack = # Driver program to test above functions stack = createStack() push(stack, str(10)) push(stack, str(20)) push(stack, str(30)) print(pop(stack) + " popped from stack")

    C#

    // C# program to implement basic stack // operations using System; namespace ImplementStack { class Stack { private int; // Maximum size of Stack top = -1; max = size; } public void push(int item) { if (top == max - 1) { Console.WriteLine("Stack Overflow"); return; } else { ele); return ele); return ele); } } } } // Driver program to test above functions class Program { static void Main() { Stack p = new Stack(5); p.push(10); p.push(20); p.push(30); p.printStack(); p.pop(); } } }

    Kết quả

    10 pushed into stack 20 pushed into stack 30 pushed into stack 30 popped from stack

    5.2 Cài đặt Stack sử dụng danh sách liên kết

    C

    // C program for linked list implementation of stack // A structure to repsent a stack struct StackNode { int data; struct StackNode* next; }; struct StackNode* newNode(int data) { struct StackNode* stackNode = (struct StackNode*)malloc(sizeof(struct StackNode)); return stackNode; } int isEmpty(struct StackNode* root) { return !root; } void push(struct StackNode** root, int data) { struct StackNode* stackNode = newNode(data); *root = stackNode; printf("%d pushed to stackn", data); } int pop(struct StackNode** root) { if (isEmpty(*root)) return INT_MIN; struct StackNode* temp = *root; free(temp); return popped; } int peek(struct StackNode* root) { if (isEmpty(root)) return INT_MIN; } int main() { struct StackNode* root = NULL; push(&root, 10); push(&root, 20); push(&root, 30); printf("%d popped from stackn", pop(&root)); printf("Top element is %dn", peek(root)); return 0; }

    C++

    // C++ program for linked list implementation of stack using namespace std; // A structure to repsent a stack class StackNode { public: int data; StackNode* next; }; StackNode* newNode(int data) { StackNode* stackNode = new StackNode(); return stackNode; } int isEmpty(StackNode* root) { return !root; } void push(StackNode** root, int data) { StackNode* stackNode = newNode(data); *root = stackNode; cout << data << " pushed to stackn"; } int pop(StackNode** root) { if (isEmpty(*root)) return INT_MIN; StackNode* temp = *root; free(temp); return popped; } int peek(StackNode* root) { if (isEmpty(root)) return INT_MIN; } int main() { StackNode* root = NULL; push(&root, 10); push(&root, 20); push(&root, 30); cout << pop(&root) << " popped from stackn"; cout << "Top element is " << peek(root) << endl; return 0; }

    Java

    // Java Code for Linked List Implementation public class StackAsLinkedList { StackNode root; static class StackNode { int data; StackNode next; StackNode(int data) { chúng tôi = data; } } public boolean isEmpty() { if (root == null) { return true; } else return false; } public void push(int data) { StackNode newNode = new StackNode(data); if (root == null) { root = newNode; } else { StackNode temp = root; root = newNode; chúng tôi = temp; } System.out.println(data + " pushed to stack"); } public int pop() { int popped = Integer.MIN_VALUE; if (root == null) { System.out.println("Stack is Empty"); } else { popped = root.data; root = root.next; } return popped; } public int peek() { if (root == null) { System.out.println("Stack is empty"); return Integer.MIN_VALUE; } else { return root.data; } } public static void main(String args) { StackAsLinkedList sll = new StackAsLinkedList(); sll.push(10); sll.push(20); sll.push(30); Console.WriteLine(sll.pop() + " popped from stack"); Console.WriteLine("Top element is " + sll.peek()); } }

    Kết quả:

    10 pushed to stack 20 pushed to stack 30 pushed to stack 30 popped from stack Top element is 20

    Ưu điểm: Việc triển khai danh sách liên kết của ngăn xếp có thể phát triển và thu nhỏ theo nhu cầu trong thời gian chạy.

    Nhược điểm: Yêu cầu thêm bộ nhớ do sự tham gia của con trỏ.

    Tài liệu từ cafedev:

    Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

    Chào thân ái và quyết thắng!

    --- Bài cũ hơn ---

  • Chi Tiết Bài Học Hàng Đợi
  • Phần 1. Giới Thiệu Về Queue Và Cài Đặt Queue Bằng Mảng Một Chiều » Cafedev.vn
  • 8 Cấu Trúc Dữ Liệu Siêu Cơ Bản Mà Dev Nào Cũng Nên Biết – Phần 3: Hashtable Và Set, Graph Và Tree
  • Top 6 Sách Cấu Trúc Dữ Liệu Và Giải Thuật Pseudocode, Java Và C/c++
  • Review Và Chia Sẻ Sách Về Cấu Trúc Dữ Liệu Và Giải Thuật Cho Mọi Ngôn Ngữ Cực Hay Cho Ace
  • Bạn đang đọc nội dung bài viết Giới Thiệu Về Cấu Trúc Dữ Liệu Stack trên website Comforttinhdauthom.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!

  • Web hay
  • Links hay
  • Guest-posts
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100