Enqueue là gì

     

Giới thiệu

Ngăn xếp với hàng đợi là nhì kiểu kết cấu dữ liệu rượu cồn được sử dụng khá phổ biến trong lập trình. Hai kiểu kết cấu này những được xây dựng dựa trên danh sách links đơn do đó khá dễ dàng để download đặt. Hãy cùng khám phá xem ngăn xếp với hàng đợi là gì cùng cách cài đặt như chũm nào nhé!

Để gọi hiểu bài xích này tốt nhất, các bạn nên có kiến thức về danh sách link đơn, các thao tác trên list đó. Nếu như bạn nào không biết, chúng ta cũng có thể xem lại bài viết đó tại đây.

Bạn đang xem: Enqueue là gì


*
*
Hàng đợi

Cài mua hàng đợi

Bây giờ bọn họ hãy cùng xem cách thiết đặt hàng hóng trong C++.

Cấu trúc một trong những phần tử

Hàng ngóng cũng dựa trên danh sách links đơn, bởi vì đó một trong những phần tử vào hàng hóng có kết cấu không không giống gì một phần tử vào danh sách liên kết đơn.

Xem thêm: Và Ngược Lại Tiếng Anh Là Gì : Định Nghĩa, Ví Dụ Anh Việt, Trái Lại Tiếng Anh

struct Node int data; Node *next;;Cấp phân phát động, khởi gán giá trị một node với trả về add của node đó tương tự như như stack xuất xắc linked list:

Node* CreateNode(int init) Node *node = new Node; node->data = init; node->next = NULL; return node;Cấu trúc một mặt hàng đợiKhông giống hệt như ngăn xếp, hàng chờ yêu ước ta phải quản lý được cả thành phần đầu cùng cuối, do chúng ta thêm vào hàng hóng là thêm vào cuối và lấy một trong những phần tử là lấy từ trên đầu hàng đợi. Vậy bọn họ sẽ có cấu trúc Queue như sau:

struct Queue Node *head; Node *tail;;Tương tự, hàng đợi rỗng khi được khởi tạo, ta đã gán head cùng tail bằng NULL:

void CreateQueue(Queue &q) q.head = NULL; q.tail = NULL;Kiểm tra hàng ngóng rỗngTương trường đoản cú như stack, hàng hóng rỗng khi bộ phận đầu mặt hàng đợi bởi NULL, chúng ta sẽ soát sổ như sau

int IsEmpty(Queue q) if (q.head == NULL) return 1; return 0;Thêm bộ phận vào cuối sản phẩm đợiThêm thành phần vào cuối hàng hóng (EnQueue) thực hiện cũng giống như như lúc ta thêm thành phần vào cuối danh sách liên kết đơn, có nghĩa là thêm vào tail.

Xem thêm: Aperitif Là Gì ? Cùng Điểm Qua 5 Loại Aperitif Nổi Tiếng Nhất

Chúng ta thực hiện như sau:

void EnQueue(Queue &q, Node *node) if (IsEmpty(q)) q.head = node; q.tail = node; else q.tail->next = node; q.tail = node; Lấy bộ phận đầu thoát khỏi hàng đợiĐể lấy thành phần đầu ra khỏi hàng ngóng (DeQueue), bọn họ sẽ lưu trữ giá trị bộ phận đầu mặt hàng đợi, tiếp nối xóa nó đi như xóa thành phần đầu của danh sách links đơn, tất nhiên là với điều kiện hàng chờ không rỗng. Sau khoản thời gian lấy bộ phận đầu tiên ra, nếu như như đó là thành phần duy duy nhất của hàng chờ thì họ sẽ gán lại tail bởi NULL luôn. Chúng ta sẽ có đoạn code như sau:

int DeQueue(Queue &q) if (IsEmpty(q)) return 0; Node *node = q.head; int data = node->data; q.head = node->next; delete node; if (q.head == NULL) q.tail = NULL; return data;Lấy giá chỉ trị phần tử đầu sản phẩm đợiLấy giá trị phần tử đầu mặt hàng đợi cũng tương tự như lấy phần tử đầu thoát khỏi hàng đợi, nhưng mà không xóa phần tử đầu đi. Chúng ta thực hiện tại như sau:

int Front(Queue q) if (IsEmpty(q)) return 0; return q.head->data;

Tổng kết

Vậy là trong bài này, bản thân đã ra mắt cho các bạn thêm hai cấu tạo dữ liệu phổ biến đó chính là ngăn xếp (stack) cùng hàng hóng (queue). Nếu các bạn thấy nội dung bài viết này hay, đừng quên share cho bằng hữu cùng biết, các chúng ta có thể để lại comment bên dưới nếu có bất kỳ thắc mắc nào. Cảm ơn chúng ta đã theo dõi bài viết!

Source code

#include using namespace std;struct Node int data; Node *next;;struct Stack Node *head;;void CreateStack(Stack &s) s.head = NULL;Node *CreateNode(int init) Node *node = new Node; node->data = init; node->next = NULL; return node;int IsEmpty(Stack s) if (s.head == NULL) return 1; return 0;void Push(Stack &s, Node *node) if (IsEmpty(s)) s.head = node; else node->next = s.head; s.head = node; int Pop(Stack &s) if (IsEmpty(s)) return 0; Node *node = s.head; int data = node->data; s.head = node->next; delete node; return data;int Top(Stack s) if (IsEmpty(s)) return 0; return s.head->data;void DestroyStack(Stack &s) Node *node = s.head; while (s.head != NULL) s.head = node->next; delete node; node = s.head; void PrintStack(Stack s) Node *node = s.head; while (node != NULL) cout data next; int main(){ Stack stack; CreateStack(stack); Node *node; for (int i = 0; i #include using namespace std;struct Node int data; Node *next;;struct Queue Node *head; Node *tail;;void CreateQueue(Queue &q) q.head = NULL; q.tail = NULL;Node* CreateNode(int init) Node *node = new Node; node->data = init; node->next = NULL; return node;void DestroyQueue(Queue &q) Node *node = q.head; while (q.head != NULL) q.head = node->next; delete node; node = q.head; q.tail = NULL;int IsEmpty(Queue q) if (q.head == NULL) return 1; return 0;void EnQueue(Queue &q, Node *node) if (IsEmpty(q)) q.head = node; q.tail = node; else q.tail->next = node; q.tail = node; int DeQueue(Queue &q) if (IsEmpty(q)) return 0; Node *node = q.head; int data = node->data; q.head = node->next; delete node; if (q.head == NULL) q.tail = NULL; return data;int Front(Queue q) if (IsEmpty(q)) return 0; return q.head->data;void PrintQueue(Queue q) Node *node = q.head; while (node != NULL) cout data next; int main(){ Queue queue; CreateQueue(queue); Node *node; for (int i = 0; i