被实现为FIFO的队列,其中插入是在一端(后部)完成,而删除是在另一端(前部)完成。输入的第一个元素首先被删除。
队列操作是
EnQueue(int数据):在后端插入
intDeQueue()
:从前端删除
但是优先级队列并不遵循先进先出,而是每个元素都基于紧急度而具有优先级。
具有相同优先级的项目以先进先出服务为基础进行处理。
优先级较高的项目先于优先级较低的其他项目处理。
Begin class Priority_Queue has following functions: function insert() to insert items at priority queue with their priorities: 1) If queue is empty insert data from the left end of the queue. 2) If queue is having some nodes then insert the new node at the end of those nodes having priority same with the new node and also before all the nodes having priority lesser than the current priority of the new node. function del() to delete items from queue. If queue is completely empty, print underflow otherwise delete the front element and update front. End
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; struct n // node declaration { int p; int info; struct n *l; }; class Priority_Queue { private: //声明一个前指针f并将其初始化为NULL。 n *f; public: Priority_Queue() //constructor { f = NULL; } void insert(int i, int p) { n *t, *q; t = new n; t->info = i; t->p = p; if (f == NULL || p < f->p) { t->l= f; f = t; } else { q = f; while (q->l != NULL && q->l->p <= p) q = q->l; t->l = q->l; q->l = t; } } void del() { n *t; if(f == NULL) //if queue is null cout<<"Queue Underflow\n"; else { t = f; cout<<"Deleted item is: "<<t->info<<endl; f = f->l; free(t); } } void show() //print queue { n *ptr; ptr = f; if (f == NULL) cout<<"Queue is empty\n"; else { cout<<"Queue is :\n"; cout<<"Priority Item\n"; while(ptr != NULL) { cout<<ptr->p<<" "<<ptr->info<<endl; ptr = ptr->l; } } } }; int main() { int c, i, p; Priority_Queue pq; Do//perform switch opeartion { cout<<"1.Insert\n"; cout<<"2.Delete\n"; cout<<"3.Display\n"; cout<<"4.Exit\n"; cout<<"Enter your choice : "; cin>>c; switch(c) { case 1: cout<<"Input the item value to be added in the queue : "; cin>>i; cout<<"Enter its priority : "; cin>>p; pq.insert(i, p); break; case 2: pq.del(); break; case 3: pq.show(); break; case 4: break; default: cout<<"Wrong choice\n"; } } while(c != 4); return 0; }
输出结果
1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 1 Input the item value to be added in the queue : 7 Enter its priority : 2 1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 1 Input the item value to be added in the queue : 6 Enter its priority : 1 1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 1 Input the item value to be added in the queue : 3 Enter its priority : 3 1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 1 Input the item value to be added in the queue : 4 Enter its priority : 3 1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 3 Queue is : Priority Item 1 6 2 7 3 3 3 4 1.Insert 2.Delete 3.Display 4.Exit Enter your choice : 4