আমাদেরকে পূর্ণসংখ্যার মান হিসাবে ডেটা এবং অগ্রাধিকার দেওয়া হয়েছে এবং কাজ হল প্রদত্ত অগ্রাধিকার অনুযায়ী একটি লিঙ্ক করা তালিকা তৈরি করা এবং ফলাফল প্রদর্শন করা৷
সারি হল একটি FIFO ডেটা স্ট্রাকচার যেখানে যে উপাদানটি প্রথমে ঢোকানো হয় সেটিই প্রথমে সরানো হয়। অগ্রাধিকার সারি হল এক ধরনের সারি যেখানে অগ্রাধিকারের উপর নির্ভর করে উপাদান সন্নিবেশ করা বা মুছে ফেলা যায়। এটি সারি, স্ট্যাক বা লিঙ্কযুক্ত তালিকা ডেটা কাঠামো ব্যবহার করে প্রয়োগ করা যেতে পারে। এই নিয়মগুলি অনুসরণ করে অগ্রাধিকার সারি প্রয়োগ করা হয় -
- সর্বোচ্চ অগ্রাধিকার সহ ডেটা বা উপাদান সর্বনিম্ন অগ্রাধিকার সহ ডেটা বা উপাদানের আগে কার্যকর করা হবে৷
- যদি দুটি উপাদানের একই অগ্রাধিকার থাকে তবে সেগুলি তালিকায় যোগ করা ক্রম অনুসারে কার্যকর করা হবে৷
অগ্রাধিকার সারি বাস্তবায়নের জন্য একটি লিঙ্কযুক্ত তালিকার একটি নোডে তিনটি অংশ থাকবে −
- ডেটা − এটি পূর্ণসংখ্যার মান সংরক্ষণ করবে।
- ঠিকানা - এটি একটি পরবর্তী নোডের ঠিকানা সংরক্ষণ করবে
- অগ্রাধিকার −এটি অগ্রাধিকার সংরক্ষণ করবে যা একটি পূর্ণসংখ্যা মান। এটি 0-10 পর্যন্ত হতে পারে যেখানে 0 সর্বোচ্চ অগ্রাধিকারের প্রতিনিধিত্ব করে এবং 10 সর্বনিম্ন অগ্রাধিকারের প্রতিনিধিত্ব করে৷
উদাহরণ
ইনপুট
আউটপুট
অ্যালগরিদম
Start Step 1-> Declare a struct node Declare data, priority Declare a struct node* next Step 2-> In function Node* newNode(int d, int p) Set Node* temp = (Node*)malloc(sizeof(Node)) Set temp->data = d Set temp->priority = p Set temp->next = NULL Return temp Step 3-> In function int peek(Node** head) return (*head)->data Step 4-> In function void pop(Node** head) Set Node* temp = *head Set (*head) = (*head)->next free(temp) Step 5-> In function push(Node** head, int d, int p) Set Node* start = (*head) Set Node* temp = newNode(d, p) If (*head)->priority > p then, Set temp->next = *head Set (*head) = temp Else Loop While start->next != NULL && start->next->priority < p Set start = start->next Set temp->next = start->next Set start->next = temp Step 6-> In function int isEmpty(Node** head) Return (*head) == NULL Step 7-> In function int main() Set Node* pq = newNode(7, 1) Call function push(&pq, 1, 2) Call function push(&pq, 3, 3) Call function push(&pq, 2, 0) Loop While (!isEmpty(&pq)) Print the results obtained from peek(&pq) Call function pop(&pq) Stopথেকে প্রাপ্ত ফলাফল প্রিন্ট করুন
উদাহরণ
#include <stdio.h> #include <stdlib.h> // priority Node typedef struct node { int data; int priority; struct node* next; } Node; Node* newNode(int d, int p) { Node* temp = (Node*)malloc(sizeof(Node)); temp->data = d; temp->priority = p; temp->next = NULL; return temp; } int peek(Node** head) { return (*head)->data; } void pop(Node** head) { Node* temp = *head; (*head) = (*head)->next; free(temp); } void push(Node** head, int d, int p) { Node* start = (*head); Node* temp = newNode(d, p); if ((*head)->priority > p) { temp->next = *head; (*head) = temp; } else { while (start->next != NULL && start->next->priority < p) { start = start->next; } // Either at the ends of the list // or at required position temp->next = start->next; start->next = temp; } } // Function to check the queue is empty int isEmpty(Node** head) { return (*head) == NULL; } // main function int main() { Node* pq = newNode(7, 1); push(&pq, 1, 2); push(&pq, 3, 3); push(&pq, 2, 0); while (!isEmpty(&pq)) { printf("%d ", peek(&pq)); pop(&pq); } return 0; }
আউটপুট
2 7 1 3