Hàng Đợi Ưu Tiên C++
1. Khái niệm sản phẩm ưu tiên
Hàng ưu tiên là 1 trong kiểu tài liệu trừu tượng tập hợp đặc biệt, trong các số đó mỗi phần tử có một độ ưu tiên làm sao đó.
Bạn đang xem: Hàng đợi ưu tiên c++
Độ ưu tiên của bộ phận thường là một trong những số, theo đó, thành phần có độ ưu tiên nhỏ nhất sẽ tiến hành ‘ưu tiên’ nhất. Một cách tổng quát thì độ ưu tiên của 1 phần tử là một trong những phần tử ở trong tập thích hợp được xếp theo vật dụng tự đường tính.Trên mặt hàng ưu tiên họ chỉ lưu ý đến các phép toán: MAKENULL để tạo nên một sản phẩm rỗng, INSERT nhằm thêm phần tử vào mặt hàng ưu tiên với DELETEMIN nhằm xoá bộ phận ra khỏi mặt hàng với thành phần được xóa bao gồm độ ưu tiên bé nhỏ nhất.Ví dụ tại dịch viện, những bệnh nhân xếp hàng để chờ giao hàng nhưng không hẳn người mang lại trước thì được giao hàng trước mà người ta có độ ưu tiên theo tình trạng cấp bách của bệnh.
2. Cài đặt đơn hàng ưu tiên
Chúng ta tất cả thể cài đặt hàng ưu tiên bằng danh sách liên kết, danh sách liên kết có thể dùng bao gồm thứ trường đoản cú hoặc không có thứ tự. Ví như danh sách links có trang bị tự thì ta hoàn toàn có thể dễ dàng tìm phần tử nhỏ dại nhất, đó là bộ phận đầu tiên, dẫu vậy phép thêm vào yên cầu ta nên duyệt vừa phải phân nửa danh sách để có một chổ xen đam mê hợp. Giả dụ danh sách chưa tồn tại thứ từ thì phép thêm vào có thể thêm vào ngay đầu danh sách, tuy thế để tra cứu kiếm phần tử nhỏ dại nhất thì ta cũng bắt buộc duyệt mức độ vừa phải phân nửa danh sách.Ta không thể cài đặt hàng ưu tiên bởi bảng băm vì chưng bảng băm không thuận tiện trong việc đào bới tìm kiếm kiếm phần tử bé dại nhất. Một cách thiết đặt hàng ưu tiên khá thuận lợi đó là cài đặt bằng cây bao gồm thứ từ bỏ từng phần.Xem thêm: BáNh TráNg NướNg - Cách Làm Bánh Tráng Nướng Siêu Giòn Ngon Tại Nhà
a. Thiết đặt hàng ưu tiên bởi cây tất cả thứ từ bỏ từng phần
Định nghĩa cây gồm thứ từ bỏ từng phầnCây bao gồm thứ từ bỏ từng phần là cây nhị phân mà lại giá trị tại từng nút đều bé dại hơn hoặc bởi giá trị của nhì con.Ví dụ:
Nhận xét: trên cây tất cả thứ trường đoản cú từng phần, nút cội là nút có mức giá trị nhỏ nhất.Từ dấn xét này, ta thấy rất có thể sử dụng cây tất cả thứ trường đoản cú từng phần đề cài đặt hàng ưu tiên và trong số đó mỗi phần tử được màn biểu diễn bởi một nút bên trên cây mà độ ưu tiên của phần tử là quý giá của nút.Để việc thiết lập được hiệu quả, ta phải cố gắng sao mang đến cây tương đối ‘cân bằng’. Nghĩa là phần lớn nút trung gian (trừ nút là cha của nút lá) đều có hai con; Đối với những nút phụ thân của nút là rất có thể chỉ bao gồm một bé và vào trường hợp kia ta quy ước là nhỏ trái (không bao gồm con phải).Để triển khai DELETEMIN ta chỉ việc trả ra nút nơi bắt đầu của cây và vứt bỏ nút này. Tuy vậy nếu sa thải nút này ta cần xây dựng lại cây với yêu ước là cây phải bao gồm thứ tự từng phần và nên "cân bằng".Chiến lược kiến thiết lại cây như sauLấy nút lá trên mức cao nhất và nằm cạnh sát phải nhất sửa chữa thay thế cho nút gốc, bởi thế cây vẫn "cân bằng" tuy vậy nó không còn đảm bảo tính máy tự từng phần. Bởi vậy để xây dừng lại cây từng phần ta triển khai việc "đẩy nút này xuống dưới" có nghĩa là ta thay đổi chổ nó cùng với nút con bé dại nhất của nó, nếu như nút con này còn có độ ưu tiên bé dại hơn nó.Giải thuật đẩy nút xuống như sau:
Nếu cực hiếm của nút gốc to hơn giá trị nhỏ trái cùng giá trị con trái to hơn hoặc bởi giá trị con buộc phải thì đẩy xuống mặt trái. (Hoán đổi quý hiếm của nút nơi bắt đầu và nhỏ trái mang lại nhau)Nếu giá trị của nút gốc lớn hơn giá trị con buộc phải và giá bán trị nhỏ phải nhỏ tuổi hơn giá chỉ trị con trái thì đẩy xuống bên phải. (Hoán đổi quý hiếm của nút nơi bắt đầu và con cần cho nhau)Sau lúc đẩy nút cội xuống một con nào đó (trái hoặc phải) thì phải liên tục xét con đó xem có phải dẩy xuống nữa hay không. Quá trình đẩy xuống này sẽ chấm dứt khi ta đã đẩy mang đến nút lá hoặc cây thỏa mãn tính chất gồm thứ từ bỏ từng phần.Ví dụ: triển khai DELETEMIN cùng với cây trong hình IV.3 bên trên ta loại bỏ nút 3 và nỗ lực nó bởi nút 9 (nút con của nút 8 ), cây gồm dạng sau



Xem thêm: Mua Lá Chè Xanh Mua Ở Đâu Tphcm, Lá Chè Xanh Tươi Tấn Phát Chống Lão Hóa Giá 80K
Ví dụ: thêm nút 4 vào cây trong hình IV.3, ta để 4 vào lá nghỉ ngơi mức cao nhất và ngay bên phải các lá đang xuất hiện trên mức này ta được cây




#define MaxLength 100typedef int ElementType;typedef int Position;typedef struct ElementType Data
void InsertPriorityQueue(ElementType X, PriorityQueue *L) Position P; ElementType temp; if (FullPriorityQueue(*L)) printf("Hang day"); else Position i=++L->Last; L->Data
Xóa phần tử có độ ưu tiên bé xíu nhấtElementType DeleteMin(Position P,PriorityQueue *L) if (EmptyPriorityQueue(*L)) printf(" Hang rong!"); else ElementType minimum= (*L).Data<1>; (*L).Data<1>=(*L).Data<(*L).Last>; (*L).Last--; // Qua trinh day xuong int i=1,found =0; while ((iLast/2)&&(found==0)) // Tim nut be nhat trong hai nut con cua i if((p((*L).Data<2*i>Last)) j=2*i; else j=2*i+1; if ((p((*L).Data>p((*L).Data
