কম্পিউটার

C++ এ দ্বিগুণ লিঙ্কযুক্ত তালিকা ব্যবহার করে অগ্রাধিকার সারি


আমাদেরকে পূর্ণসংখ্যার মান হিসাবে ডেটা এবং অগ্রাধিকার দেওয়া হয়েছে এবং কাজ হল প্রদত্ত অগ্রাধিকার অনুযায়ী একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা তৈরি করা এবং ফলাফল প্রদর্শন করা৷

সারি হল একটি FIFO ডেটা স্ট্রাকচার যেখানে যে উপাদানটি প্রথমে ঢোকানো হয় সেটিই প্রথমে সরানো হয়। অগ্রাধিকার সারি হল এক ধরনের সারি যেখানে অগ্রাধিকারের উপর নির্ভর করে উপাদান সন্নিবেশ করা বা মুছে ফেলা যায়। এটি সারি, স্ট্যাক বা লিঙ্কযুক্ত তালিকা ডেটা কাঠামো ব্যবহার করে প্রয়োগ করা যেতে পারে। এই নিয়মগুলি অনুসরণ করে অগ্রাধিকার সারিতে প্রয়োগ করা হয় -

  • সর্বোচ্চ অগ্রাধিকার সহ ডেটা বা উপাদান সর্বনিম্ন অগ্রাধিকার সহ ডেটা বা উপাদানের আগে কার্যকর করা হবে৷
  • যদি দুটি উপাদানের একই অগ্রাধিকার থাকে তবে সেগুলি তালিকায় যোগ করা ক্রম অনুসারে কার্যকর করা হবে৷

অগ্রাধিকার সারি বাস্তবায়নের জন্য দ্বিগুণ লিঙ্কযুক্ত তালিকার একটি নোডে তিনটি অংশ থাকবে −

  • ডেটা - এটি পূর্ণসংখ্যার মান সংরক্ষণ করবে।
  • পরবর্তী ঠিকানা - এটি একটি পরবর্তী নোডের ঠিকানা সংরক্ষণ করবে
  • পূর্ববর্তী ঠিকানা - এটি একটি পূর্ববর্তী নোডের ঠিকানা সংরক্ষণ করবে
  • অগ্রাধিকার - এটি অগ্রাধিকার সংরক্ষণ করবে যা একটি পূর্ণসংখ্যা মান। এটি 0-10 পর্যন্ত হতে পারে যেখানে 0 সর্বোচ্চ অগ্রাধিকারের প্রতিনিধিত্ব করে এবং 10 সর্বনিম্ন অগ্রাধিকারের প্রতিনিধিত্ব করে৷

উদাহরণ

ইনপুট -

C++ এ দ্বিগুণ লিঙ্কযুক্ত তালিকা ব্যবহার করে অগ্রাধিকার সারি

আউটপুট-

C++ এ দ্বিগুণ লিঙ্কযুক্ত তালিকা ব্যবহার করে অগ্রাধিকার সারি

অ্যালগরিদম

StartStep 1-> একটি struct Node Declare info, priority Declare struct Node *prev, *nextStep 2-> in function push(Node** fr, Node** rr, int n, int p) সেট নোড* নিউজ =(Node*)malloc(sizeof(Node)) Set news->info =n সেট করুন->priority =p যদি *fr ==NULL তাহলে, Set *fr =news Set *rr =news Set news->পরবর্তী =NULL অন্যথায় যদি p <=(*fr)->অগ্রাধিকার তাহলে, খবর সেট করুন->পরবর্তী =*fr সেট (*fr)->পূর্ববর্তী =সংবাদ->পরবর্তী সেট *fr =সংবাদ অন্যথায় যদি p>
 (*rr)->তাহলে অগ্রাধিকার সেট করুন->পরবর্তী =NULL সেট (*rr)->পরবর্তী =সংবাদ সেট করুন->পূর্ববর্তী =(*rr)->পরবর্তী সেট *rr =খবর অন্য সেট নোড* শুরু =(*fr)->পরবর্তী লুপ যখন শুরু->অগ্রাধিকার> p সেট শুরু =শুরু->পরবর্তী সেট (শুরু->পূর্ববর্তী)->পরবর্তী =সংবাদ সেট সংবাদ->পরবর্তী =শুরু->পূর্ববর্তী সেট সংবাদ->পূর্ববর্তী =(শুরু->পূর্ববর্তী) ->পরবর্তী সেট স্টার্ট->প্রেভ =নিউজ->পরবর্তী ধাপ 3-> ফাংশনে int পিক (নোড *fr) রিটার্ন fr->তথ্য ধাপ 4-> ফাংশন বুলে খালি(নোড *fr) রিটার্ন (fr ==NULL) ধাপ 5-> ফাংশনে i nt pop(Node** fr, Node** rr) সেট নোড* temp =*fr সেট res =temp->তথ্য সেট (*fr) =(*fr)->পরবর্তী বিনামূল্যে(temp) যদি *fr ==NULL তারপর, *rr =NULL রিটার্ন রিটার্ন স্টেপ 6-> ফাংশনে int main() নোড ঘোষণা এবং বরাদ্দ করুন *front =NULL, *rear =NULL Call function push(&front, &rear, 4, 3) Call function push(&front, &rear, 3, 2) কল ফাংশন পুশ (&সামনে, &পিছন, 5, 2) কল ফাংশন পুশ (&সামনে, &পিছন, 5, 7) কল ফাংশন পুশ (&সামনে, &পিছন, 2, 6) কল ফাংশন পুশ (&সামনে, &পিছন, 1, 4) ফাংশন পপ (&front, &rear) কল করার ফলে প্রাপ্ত ফলাফলগুলি প্রিন্ট করুন 

উদাহরণ

#include  namespace ব্যবহার করে std;//doubly linked list nodestruct Node { int info; int priority; struct Node *prev, *next;};// একটি নতুন Nodevoid পুশ (Node** fr, Node** rr, int n, int p) { Node* news =(Node*)malloc(sizeof(Node)); খবর->তথ্য =n; খবর->অগ্রাধিকার =পি; // যদি লিঙ্ক করা তালিকা খালি থাকে যদি (*fr ==NULL) { *fr =খবর; *আরআর =খবর; খবর->পরবর্তী =NULL; } else { // p এর চেয়ে কম বা সমান সামনে থাকলে // নোডের অগ্রাধিকার, তাহলে সামনে নোড // সন্নিবেশ করুন। যদি (p <=(*fr)->অগ্রাধিকার) { সংবাদ->পরবর্তী =*fr; (*fr)->পূর্ব =সংবাদ->পরবর্তী; *fr =খবর; } অন্যথায় যদি (p>
 (*rr)->অগ্রাধিকার) { news->পরবর্তী =NULL; (*rr)->পরবর্তী =খবর; খবর->পূর্ব =(*rr)->পরবর্তী; *আরআর =খবর; } else { // পজিশন খোঁজা যেখানে আমাদের // নতুন নোড ইনসার্ট করতে হবে। নোড* শুরু =(*fr)->পরবর্তী; যখন (শুরু->অগ্রাধিকার> p) শুরু =শুরু->পরবর্তী; (শুরু->পূর্ব)->পরবর্তী =খবর; খবর->পরবর্তী =শুরু->পূর্ববর্তী; news->prev =(start->prev)->পরবর্তী; start->prev =news->পরবর্তী; } }}//শেষ ভ্যালুইন্ট পিক(নোড *fr) { return fr->info;}bool isEmpty(Node *fr) { return (fr ==NULL);}int pop(Node** fr, Node** rr) { নোড* temp =*fr; int res =temp->তথ্য; (*fr) =(*fr)->পরবর্তী; বিনামূল্যে (টেম্প); যদি (*fr ==NULL) *rr =NULL; রিটার্ন res;}// main functionint main() { Node *front =NULL, *rear =NULL; ধাক্কা (&সামনে, &পিছন, 4, 3); ধাক্কা (&সামনে, &পিছন, 3, 2); ধাক্কা (&সামনে, &পিছন, 5, 2); ধাক্কা (&সামনে, &পিছন, 5, 7); ধাক্কা (&সামনে, &পিছন, 2, 6); ধাক্কা (&সামনে, &পিছন, 1, 4); printf("%d\n", পপ(&সামনে, &পিছন)); printf("%d\n", পিক(সামনে)); রিটার্ন 0;

আউটপুট

53

  1. C++ এ একটি লিঙ্কযুক্ত তালিকা সমতল করা

  2. C++ এ দ্বিগুণ লিঙ্কযুক্ত তালিকার আকার খোঁজার প্রোগ্রাম

  3. C++ এ লিঙ্কড লিস্ট ব্যবহার করে দুটি বহুপদ যোগ করা হচ্ছে।

  4. লিংকড লিস্ট ব্যবহার করে গ্রাফ রিপ্রেজেন্ট করার জন্য C++ প্রোগ্রাম