কিভাবে C ++ কিউ ব্যবহার করবেন

How Use C Queue



ভূমিকা

একটি সারি হল আইটেমের একটি সংগ্রহ, যেখানে তালিকায় প্রথম আইটেমটি যোগ করা হয়, অবশ্যই পরবর্তী আইটেমটি পরবর্তীতে সরানো হবে। সুতরাং সংগ্রহে আইটেম যুক্ত হওয়ার সাথে সাথে এটি আকারে বাড়ছে, অর্থাৎ এটি দৈর্ঘ্যে বাড়ছে। যখনই কোন আইটেম অপসারণ করা হবে, এটি অবশ্যই প্রথমে যোগ করা হবে। যদি আইটেমগুলি ক্রমাগত সরানো হয়, তাহলে পরেরটি সরানো হয়, দ্বিতীয় আইটেম; তৃতীয়টি পরে সরানো হয়, এবং তাই।

মূল তালিকার প্রথম আইটেমটি সরানোর পরে, দ্বিতীয়টি প্রথম আইটেম হয়ে যায়। দ্বিতীয় আইটেমটি সরানোর পরে, তৃতীয়টি প্রথম আইটেম হয়ে যায়, এবং তাই।







একটি সারির একটি ভাল বাস্তব জীবনের উদাহরণ হল যখন লোকেরা পরিষেবা বা ভাল জন্য অপেক্ষা করার জন্য লাইন করে। প্রথম ব্যক্তিকে শেষের আগে আগে পরিবেশন করা হয়। যাইহোক, এই টিউটোরিয়ালে যে সারির কথা বলা হয়েছে, সেটি হল সফটওয়্যার সারি, যেমন C ++ এ ডিজাইন করা হয়েছে।



ফিফো

FIFO মানে ফার্স্ট-ইন, ফার্স্ট-আউট। এটি সারির প্রশংসা করার আরেকটি উপায়। এর অর্থ হল, তালিকায় প্রবেশ করার জন্য প্রথম আইটেম, প্রথম আইটেমটি সরানো হবে, যখনই অপসারণ করা হবে। তালিকার শুরুটাকে বলা হয় মাথা বা সামনে; তালিকার শেষে বলা হয় পিছন বা লেজ।



অপরিহার্য অপারেশন

একটি সফটওয়্যার সারিতে কমপক্ষে নিম্নলিখিত ক্রিয়াকলাপ থাকতে হবে:





ধাক্কা

এই অপারেশন, সারির পিছনে একটি নতুন উপাদান যোগ করে। এই অপারেশনকে আনুষ্ঠানিকভাবে বলা হয়, এনকিউ।



স্থানান্তর

এই অপারেশন সারির প্রথম উপাদানটি সরিয়ে দেয় এবং দ্বিতীয় উপাদানটি নতুন প্রথম উপাদান হয়ে যায়। এই অপারেশনকে আনুষ্ঠানিকভাবে ডেকিউ বলা হয়। একে C ++ এ পপ বলা হয়।

এই নিবন্ধটি ব্যাখ্যা করে কিভাবে C ++ কিউ ডেটা স্ট্রাকচার ব্যবহার করতে হয়। এই নিবন্ধটির বাকী অংশটি বোঝার জন্য আপনার C ++ পয়েন্টার এবং রেফারেন্সগুলি জানা উচিত।

ক্লাস এবং অবজেক্টস

একটি শ্রেণী হল ভেরিয়েবল এবং ফাংশনগুলির একটি সেট যা একসাথে কাজ করে, যেখানে ভেরিয়েবলের মান নির্ধারণ করা হয় না। যখন ভেরিয়েবলে মান নির্ধারিত হয়, তখন ক্লাস একটি বস্তুতে পরিণত হয়। একই শ্রেণীতে প্রদত্ত বিভিন্ন মান বিভিন্ন বস্তুর ফলে; অর্থাৎ, বিভিন্ন বস্তু বিভিন্ন শ্রেণীর একই শ্রেণী। একটি শ্রেণী থেকে একটি বস্তু তৈরি করা বস্তুকে তাত্ক্ষণিকভাবে বলা হয়।

নাম, সারি, একটি শ্রেণী। কিউ ক্লাস থেকে তৈরি একটি বস্তুর একটি প্রোগ্রামার নির্বাচিত নাম আছে।

একটি ফাংশন যা একটি শ্রেণীর অন্তর্গত একটি ক্লাস থেকে একটি বস্তু তাত্ক্ষণিকভাবে প্রয়োজন। C ++ এ, সেই ফাংশনটির ক্লাসের নামের মতো নাম রয়েছে। ক্লাস থেকে তৈরি বস্তুর (তাত্ক্ষণিক) প্রোগ্রামার দ্বারা তাদের দেওয়া বিভিন্ন নাম রয়েছে।

শ্রেণী থেকে একটি বস্তু তৈরি করা মানে বস্তু তৈরি করা; এর অর্থ তাত্ক্ষণিক।

একটি C ++ প্রোগ্রাম যা সারি শ্রেণী ব্যবহার করে, ফাইলের শীর্ষে নিম্নলিখিত লাইনগুলি দিয়ে শুরু হয়:

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

প্রথম লাইন ইনপুট/আউটপুটের জন্য। দ্বিতীয় লাইন হল প্রোগ্রামটিকে কিউ ক্লাসের সমস্ত বৈশিষ্ট্য ব্যবহার করার অনুমতি দেওয়া। তৃতীয় লাইনটি প্রোগ্রামটিকে স্ট্যান্ডার্ড নেমস্পেসে নাম ব্যবহার করতে দেয়।

একটি ফাংশন ওভারলোডিং

যখন দুই বা ততোধিক ভিন্ন ফাংশন স্বাক্ষরের একই নাম থাকে, তখন সেই নামটি ওভারলোড করা হয় বলে বলা হয়। যখন একটি ফাংশন বলা হয়, সংখ্যা এবং আর্গুমেন্টের ধরন, কোন ফাংশনটি আসলে কার্যকর করা হয় তা নির্ধারণ করুন।

নির্মাণ

কিউ<টাইপ>নাম()

নিম্নলিখিত ঘোষণাপত্রটি একটি সারি নামক তাত্ক্ষণিক করে, কিউ টাইপের int।

কিউ<int>যে;

সারি খালি। ঘোষনা শুরু হয় সংরক্ষিত শব্দ দিয়ে, সারির পরে ডেটা টাইপ সহ কোণ বন্ধনী। তারপরে আপনার কাছে প্রোগ্রামারের দেওয়া সারির নাম রয়েছে।

প্রারম্ভিক তালিকার সাথে নির্মাণ

নিম্নোক্ত সংজ্ঞা দেখায় কিভাবে প্রাথমিক তালিকা দিয়ে একটি সারি তৈরি করতে হয়:

কিউ<ভাসা>যে({1.1, 2.2, 3.3, 4.4});

একটি সারি ধ্বংস করা

একটি সারি ধ্বংস করার জন্য, এটিকে সুযোগের বাইরে যেতে দিন।

সারি এলিমেন্ট অ্যাক্সেস

ধাক্কা (মান)

একটি সারি একটি প্রথম-প্রথম-প্রথম তালিকা। সুতরাং, প্রতিটি মান পিছন থেকে যোগ করা হয়। নিম্নলিখিত কোড সেগমেন্ট একটি খালি সারি তৈরি করে, যার পরে পিছন থেকে পাঁচটি ভাসমান মান যোগ করা হয়:

কিউ<ভাসা>যে;

যে।ধাক্কা(1.1);
যে।ধাক্কা(2.2);
যে।ধাক্কা(3.3);
যে।ধাক্কা(4.4);
যে।ধাক্কা(5.5);

সাইজ () const

এটি সারির উপাদানগুলির সংখ্যা প্রদান করে। নিচের কোডটি ব্যাখ্যা করে:

কিউ<ভাসা>যে;
যে।ধাক্কা(1.1);যে।ধাক্কা(2.2);যে।ধাক্কা(3.3);যে।ধাক্কা(4.4);যে।ধাক্কা(5.5);
খরচ<<যে।আকার() << 'n';

আউটপুট 5।

সামনে ()

এটি উপাদানটি না সরিয়ে সারির প্রথম উপাদানটির একটি রেফারেন্স প্রদান করে। নিম্নলিখিত কোডের আউটপুট 1.1।

কিউ<ভাসা>যে;
যে।ধাক্কা(1.1);যে।ধাক্কা(2.2);যে।ধাক্কা(3.3);যে।ধাক্কা(4.4);যে।ধাক্কা(5.5);
খরচ<<যে।সামনে() << 'n';

উপাদানটি সারি থেকে সরানো হয় না।

সামনের () const

যখন সারি নির্মাণ const এর আগে হয়, অভিব্যক্তি front () const এর পরিবর্তে কার্যকর করা হয় front ()। এটি নিম্নলিখিত কোডে ব্যবহৃত হয়, উদাহরণস্বরূপ।

constকিউ<ভাসা>যে({1.1, 2.2, 3.3, 4.4, 5.5});
খরচ<<যে।সামনে() << 'n';

একটি ধ্রুবক রেফারেন্স ফেরত দেওয়া হয়। উপাদানটি ভেক্টর থেকে সরানো হয় না। সারির উপাদান পরিবর্তন করা যাবে না।

পেছনে()

এটি উপাদানটি না সরিয়ে সারির শেষ উপাদানটির একটি রেফারেন্স প্রদান করে। নিম্নলিখিত কোডের আউটপুট 5.5।

কিউ<ভাসা>যে;
যে।ধাক্কা(1.1);যে।ধাক্কা(2.2);যে।ধাক্কা(3.3);যে।ধাক্কা(4.4);যে।ধাক্কা(5.5);
খরচ<<যে।পেছনে() << 'n';

ফিরে () const

যখন সারি নির্মাণ const এর পূর্বে হয়, অভিব্যক্তি back () const এর পরিবর্তে মৃত্যুদন্ড কার্যকর করা হয়। এটি নিম্নলিখিত কোডে ব্যবহৃত হয়, উদাহরণস্বরূপ।

constকিউ<ভাসা>যে({1.1, 2.2, 3.3, 4.4, 5.5});
খরচ<<যে।পেছনে() << 'n';

একটি ধ্রুবক রেফারেন্স ফেরত দেওয়া হয়। উপাদানটি সারি থেকে সরানো হয় না। সারি নির্মাণের জন্য পূর্ববর্তী কনস্টের সাথে, সারির উপাদানগুলি পরিবর্তন করা যাবে না।

কিউ ক্যাপাসিটি

সাইজ () const

- উপরে দেখুন

খালি () const

সারিতে কোন উপাদান না থাকলে এটি সত্যের জন্য 1 প্রদান করে, অথবা সারি খালি থাকলে মিথ্যা জন্য 0 প্রদান করে। নিচের কোডটি এটিকে ব্যাখ্যা করে:

কিউ<ভাসা>যে 1({1.1, 2.2, 3.3, 4.4, 5.5});
খরচ<<যে 1।খালি() << 'n';
কিউ<ভাসা>যে 2;
খরচ<<যে 2।খালি() << 'n';

আউটপুট হল:

0

সারি সংশোধনকারী

পপ ()

একটি সারি হল FIFO, তাই যে কোন উপাদানকে সরিয়ে ফেলতে হবে তা অবশ্যই সারির উপরের (মাথা) থেকে সরিয়ে ফেলতে হবে। এই সদস্য ফাংশনটি ফেরত না দিয়ে প্রথম উপাদানটি সরিয়ে দেয়। নিচের কোডটি এটিকে ব্যাখ্যা করে:

কিউ<ভাসা>যে({1.1, 2.2, 3.3, 4.4, 5.5});
খরচ<<যে।সামনে() << 'n';
যে।পপ();
খরচ<<যে।আকার() << 'n';

আউটপুট হল:

1.1
4

a. swap (b)

দুটি সারি অদলবদল করা যেতে পারে, যেমন এই কোড সেগমেন্টে দেখানো হয়েছে:

কিউ<ভাসা>যে 1({1.1, 2.2, 3.3, 4.4, 5.5});
কিউ<ভাসা>যে 2({10, বিশ});
যে 1।বিনিময়(যে 2);
খরচ<< কিউ 1 এর প্রথম উপাদান এবং আকার:
'
<<যে 1।সামনে() <<','<<যে 1।আকার() << 'n';
খরচ<< 'প্রথম উপাদান এবং কিউ 2 এর আকার'<<
যে 2।সামনে() <<','<<যে 2।আকার() << 'n';

আউটপুট হল:

কিউ 1: 10, 2 এর প্রথম উপাদান এবং আকার

কিউ 2 এর প্রথম উপাদান এবং আকার: 1.1, 5

মনে রাখবেন একটি সারির দৈর্ঘ্য প্রয়োজনে বৃদ্ধি করা হয়েছে। এছাড়াও, যে মানগুলির প্রতিস্থাপন ছিল না, কিছু ডিফল্ট মান দ্বারা প্রতিস্থাপিত হয়। ডেটা টাইপ একই ধরনের হতে হবে।

সারির জন্য সমতা এবং সম্পর্কীয় অপারেটর

C ++ এ সাধারণ অক্ষরের জন্য, আরোহী ক্রমে, সংখ্যাগুলি বড় হাতের অক্ষরের আগে আসে, যা ছোট হাতের অক্ষরের আগে আসে। শূন্য অক্ষর শূন্য এবং তাদের সবার আগে আসে।

সমতা অপারেটর

সত্যের জন্য 1 এবং মিথ্যার জন্য 0 প্রদান করে।

== অপারেটর

দুটি সারির সমান আকার এবং সংশ্লিষ্ট উপাদান সমান হলে 1 প্রদান করে; অন্যথায় এটি 0. রিটার্ন করে। উদাহরণ:

কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1==যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট হল: 0।

The! = অপারেটর

- উপরের বিপরীত। উদাহরণ:

কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1! =যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট হল: 1।

রিলেশনাল অপারেটর

সত্যের জন্য 1 এবং মিথ্যার জন্য 0 প্রদান করে।

দ্য

প্রথম সারি যদি দ্বিতীয় সারির প্রাথমিক উপসেট হয়, তাহলে দুটি সমান অংশের উপাদান একই এবং একই ক্রমে থাকে। যদি উভয় সারি একই আকার বা বিভিন্ন আকারের হয় এবং বাম থেকে ডানে চলে যায়, প্রথম সারিতে এমন একটি উপাদান দেখা যায় যা দ্বিতীয় সারির সংশ্লিষ্ট উপাদানের চেয়ে কম হয়, তারপরও 1 টি ফেরত দেওয়া হবে। অন্যথায় 0 ফেরত দেওয়া হয়। উদাহরণ:

কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1<যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট 1।

অপারেটর

- উপরের বিপরীত। উদাহরণ:

কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1>যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট: 0

দ্য<= Operator

- একই রকম কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1<=যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট: 1

> = অপারেটর

- উপরের বিপরীত। উদাহরণ:

কিউ<const গৃহস্থালি*>যে 1({'ধরনের', 'অন্যকিছু'});
কিউ<const গৃহস্থালি*>যে 2({'দুষ্ট'});
intএকের উপর=যে 1> =যে 2;
খরচ<<একের উপর<< 'n';

আউটপুট: 0

ক্লাস এবং তার তাত্ক্ষণিক বস্তু

একটি মান একটি ডেটা টাইপের জন্য, যেমন একটি তাত্ক্ষণিক বস্তু একটি শ্রেণীর জন্য। সারি নির্মাণ একটি শ্রেণীকে ডেটা টাইপ হিসাবে গ্রহণ করতে পারে। নিম্নলিখিত প্রোগ্রামটি এটিকে ব্যাখ্যা করে:

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;
ক্লাস TheCla
{
জনসাধারণ:
intএকের উপর;
স্থির গৃহস্থালিসিএইচ;
অকার্যকরফাংশন(গৃহস্থালিনা, const গৃহস্থালি *পৃ)
{
খরচ<< 'সেখানে ' <<একের উপর<< 'মূল্যবান বই' <<না<<পৃ<< ' দোকান.' << 'n';
}
স্থির অকার্যকরমজা(গৃহস্থালিসিএইচ)
{
যদি (সিএইচ== 'প্রতি')
খরচ<< 'অফিসিয়াল স্ট্যাটিক সদস্য ফাংশন' << 'n';
}
};
intপ্রধান()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;
কিউ<TheCla>যে;
যে।ধাক্কা(obj1);যে।ধাক্কা(obj2);যে।ধাক্কা(obj3);যে।ধাক্কা(obj4);যে।ধাক্কা(obj5);
খরচ<<যে।আকার() << 'n';
প্রত্যাবর্তন 0;
}

আউটপুট 5।

যোজিত তালিকা

সারির তালিকাকে টেকনিক্যালি লিঙ্ক করা তালিকা বলা হয়। সারির জন্য দুটি ধরণের লিঙ্কযুক্ত তালিকা রয়েছে: এককভাবে সংযুক্ত তালিকা এবং দ্বিগুণ সংযুক্ত তালিকা।

একটি এককভাবে সংযুক্ত তালিকা উপাদান দুই সদস্যের একটি কাঠামো দ্বারা প্রয়োগ করা যেতে পারে। একজন সদস্য পরবর্তী উপাদানটির জন্য একটি পয়েন্টার ধরে রাখে এবং অন্য সদস্য ডেটাম ধারণ করে (ডেটার জন্য একবচন)।

একটি দ্বিগুণ সংযুক্ত তালিকা উপাদান তিন সদস্যের একটি কাঠামো দ্বারা প্রয়োগ করা যেতে পারে। মধ্য সদস্য ডেটাম ধারণ করে, যখন প্রথম এবং তৃতীয় সদস্যরা তাদের সংলগ্ন উপাদানগুলির দিকে নির্দেশ করে।

সারির আবেদন

সারি একটি প্রথম ইন-ফার্স্ট আউট ডেটা স্ট্রাকচার। গণনার ক্ষেত্রে এমন পরিস্থিতি রয়েছে যখন ডেটা একটি সারির আকারে আসে, প্রথম-প্রথম-প্রথম আচরণের প্রয়োজন হয়।

কম্পিউটার সম্পদ ভাগ করা

কম্পিউটারের একটি সম্পদ সীমিত প্রাপ্যতার যে কোন শারীরিক বা ভার্চুয়াল উপাদান। এর মধ্যে রয়েছে সিপিইউ, ভিডিও কার্ড, হার্ড ড্রাইভ এবং মেমরি। এই ধরনের সম্পদ ভাগ করার জন্য একটি সারি প্রয়োজন।

হ্যান্ডলিং ইন্টারাপ্টস

কম্পিউটার পেরিফেরালদের সময়ে সময়ে কম্পিউটারকে বাধাগ্রস্ত করতে হবে। বাধাগুলি যেভাবে এসেছিল সেভাবেই পরিচালনা করতে হবে। এই একটি সারি প্রয়োজন।

তথ্য পরিচালনা করুন।

সারি ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, চাকরির জন্য অ্যাপ্লিকেশন ফাইলগুলি পরিচালনা করতে, যদি ফাইলগুলি কম্পিউটারে সংরক্ষণ করা হয়।

উপসংহার

একটি সারি হল একটি তালিকা তথ্য কাঠামো, যা হয় এককভাবে সংযুক্ত তালিকা অথবা দ্বিগুণ-সংযুক্ত তালিকা। একটি নিয়ম হিসাবে, তালিকায় যে প্রথম উপাদানটি প্রবেশ করে তা হল প্রথম উপাদান। C ++ তার স্ট্যান্ডার্ড লাইব্রেরিতে একটি সারি ডেটা স্ট্রাকচার প্রদান করে। এই কাঠামোর জন্য উপলব্ধ সদস্য ফাংশন এবং অপারেটরগুলির বিভাগগুলি হল সারি নির্মাণ, সারি উপাদান অ্যাক্সেস, সারি ক্ষমতা, সারি সংশোধনকারী এবং সারি ওভারলোডেড অপারেটর।

যে কোন কিউ ডেটা স্ট্রাকচার কমপক্ষে, push () এবং pop () মেম্বার ফাংশন প্রদান করতে হবে। push () মানে, সারির পিছনে একটি নতুন উপাদান পাঠানো; এবং পপ () মানে, সারির সামনে থাকা উপাদানটি সরানো। দুর্ভাগ্যক্রমে, C ++ এ, এই ফাংশনগুলি ধাক্কা বা পপ করা মান ফেরত দেয় না। সুতরাং, ধাক্কা দেওয়ার আগে শেষ উপাদানটি জানতে, অতিরিক্ত ব্যাক () ফাংশনটি ব্যবহার করতে হবে; এবং পপ করার আগে প্রথম উপাদানটি জানতে, অতিরিক্ত ফ্রন্ট () ফাংশনটি ব্যবহার করতে হবে।

একটি মান একটি ডেটা টাইপের জন্য, যেমন একটি তাত্ক্ষণিক বস্তু একটি শ্রেণীর জন্য। সুতরাং, কিউ টেমপ্লেট তাত্ক্ষণিকতার জন্য একটি নির্দিষ্ট শ্রেণিকে ডেটা টাইপ হিসাবে ব্যবহার করা যেতে পারে। ক্লাসের জন্য বিভিন্ন বস্তু ক্লাসের জন্য বিভিন্ন মানের মত হয়ে যায়।

সারিতে কম্পিউটারে অ্যাপ্লিকেশন রয়েছে। এটি ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, চাকরির জন্য অ্যাপ্লিকেশন ফাইলগুলি পরিচালনা করতে, যদি ফাইলগুলি কম্পিউটারে সংরক্ষণ করা হয়।

ক্রিস