পাইথনে ক্যু ডেটা স্ট্রাকচার কী?



এই নিবন্ধটি আপনাকে পাইথনের ক্যু ডেটা স্ট্রাকচারগুলির একটি বিস্তৃত এবং বিস্তৃত জ্ঞানের সাথে উদাহরণ সহ অনেকগুলি প্রদান করবে।

যেমন আপনি ইতিমধ্যে পূর্ববর্তী নিবন্ধে ডেটা স্ট্রাকচারগুলির গুরুত্ব সম্পর্কে অধ্যয়ন করেছেন, নিবন্ধটির ডানদিকে ডুব দেয় যথা - ক্যু ডেটা কাঠামো। আমি নিম্নলিখিত বিষয়গুলি নিয়ে আলোচনা করব:

সারি ডাটা স্ট্রাকচারের প্রয়োজন

ধরুন আপনি একদিন কোনও সিনেমার জন্য চান মাল্টিপ্লেক্সে, টিকিট প্রথম-প্রথম-প্রথম ভিত্তিতে জারি করা হয়েছিল এবং লোকেরা একে অপরের পেছনে দাঁড়িয়ে ছিল তাদের পালনের জন্য অপেক্ষা করছে। তো এখন তুমি কি করবে?? আপনি অবশ্যই পিছনে গিয়ে টিকিটের অপেক্ষায় শেষ ব্যক্তির পিছনে দাঁড়িয়েছিলেন stood





queue-data-structure

হ্যাডোপ ম্যাপ্রেডাসের সাথে তুলনা করে অ্যাপাচি স্পার্ক

এখানে লোকেরা একে অপরের পেছনে দাঁড়িয়ে আছে এবং তাদের উপর ভিত্তি করে সার্ভিস করা হয় ফার্স্ট-ইন-ফার্স্ট-আউট (ফিফো) পদ্ধতি. এ জাতীয় ব্যবস্থা ক হিসাবে পরিচিত কিউ.



ক্যু প্রতিদিনের জীবন উদাহরণ

আসুন কয়েকটি উদাহরণ বিবেচনা করুন যেখানে আমরা প্রতিদিনের জীবনে সারি টাইপ কাজ করে দেখি:

  • ফোন উত্তর প্রদানকারী সিস্টেম- আপনার গ্যাজেটে প্রথমে কল করা ব্যক্তি প্রথমে উপস্থিত হয়।
  • লাগেজ চেকিং মেশিন - কনভেয়ার বেল্টে প্রথমে রাখা লাগেজ চেক করে।
  • টোল ট্যাক্স ব্রিজের যানবাহন - প্রথম দিকে আগত গাড়িগুলি প্রথমে চলে যায়।
  • গ্রাহক সেবা - কোনও পরিষেবা প্রতিনিধি মুক্ত না হওয়া অবধি ফোন সিস্টেমগুলি লোকেরা তাদের কল করার জন্য ক্রু ব্যবহার করবে Que

এই সমস্ত উদাহরণ অনুসরণ করে ফার্স্ট-ইন-লাস্ট-আউট কৌশল।

একটি সারি ডেটা স্ট্রাকচার তৈরি করা হচ্ছে

পরিপূরক অপারেশনগুলি ছাড়াও, আমি বলতে পারি যে কাতারে সম্ভব মূল অপারেশনগুলি হ'ল:



এক. এন-ক্যু বা সারিটির শেষে একটি উপাদান যুক্ত করুন।

ঘ। ডি-ক্যু বা কিউ এর সামনের অংশ থেকে একটি উপাদান সরান

এখন, পাইথনে ক্লাস ক্যু তৈরির মাধ্যমে শুরু করা যাক:

শ্রেণি সারি: Def __init __ (স্ব, সর্বোচ্চ_সাইজ): স্ব .__ ম্যাক্স_সাইজ = সর্বাধিক সাইজ করুন __ উপাদানসমূহ [[কোনও কিছুই নয়] * স্ব .__ সর্বোচ্চ_সাইজ স্ব .__ রিয়ার = -1 স্ব .__ সম্মুখ = 0
  • ম্যাক্স_সাইজ সারিতে প্রত্যাশিত উপাদানগুলির সর্বাধিক সংখ্যা।
  • কিউনের উপাদানগুলি পাইথন তালিকায় সংরক্ষণ করা হয়
  • রিয়ারটি সারিতে থাকা সর্বশেষের সূচকের অবস্থান নির্দেশ করে।
  • পিছনটি প্রথমে -1 এ নেওয়া হয়েছে কারণ সারিটি খালি রয়েছে
  • সামনের সারিতে প্রথম উপাদানটির অবস্থান নির্দেশ করে।
  • সম্মুখভাগটি প্রাথমিকভাবে 0 হিসাবে নেওয়া হয় কারণ এটি সর্বদা সারির প্রথম উপাদানটিকে নির্দেশ করবে

এনকুই

এখন, আপনি যখন কাতারে উপাদানগুলি সজ্জিত করার চেষ্টা করছেন, আপনাকে নিম্নলিখিত পয়েন্টগুলি মনে রাখতে হবে:

  • কাতারে স্থান বাকী আছে কি না, অর্থাত্ পিছনটি সর্বাধিক_সাইজ -1 সমান হয়
  • রিয়ারটি সারিতে সন্নিবেশ করা শেষ উপাদানটির দিকে নির্দেশ করবে।

তো, অ্যালগরিদম কী হবে ??

# পুনর্বার সর্বাধিক আকারের কিউ ডিফ গেট_ম্যাক্স_সাইজ (স্ব): ফেরত দিন __ সম্পূর্ণ ডিএফ এনকুই (স্ব, তথ্য) না থাকলে কাতারে ডেটা সন্নিবেশ করান / এনক্যু করুন: যদি (self.is_full ()): মুদ্রণ ('সারি পূর্ণ, কোন সারণী সম্ভব নয়'): স্ব .__ রিয়ার + = 1 স্ব। __ উপাদানসমূহ [স্ব .__ পিছন] = ডেটা # কাতার ডিএফ প্রদর্শন (স্ব) এর সমস্ত সামগ্রী প্রদর্শন করুন: আমি সীমার মধ্যে (0, স্ব .__ পিছনে + 1): মুদ্রণ করুন (স্ব .__ উপাদানগুলি [i]) # আপনি এটি ব্যবহার করতে পারেন ডিফল্ট ডিবাগ করার সময় ডিএস অবজেক্টের উপাদানগুলি মুদ্রণ করতে __str __ () এর নীচে: _ = [] সূচক = স্ব .__ সামনের সময় (সূচী)<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

এখন, আপনি যখন নিম্নলিখিতটি সম্পাদন করেন:

সারি 1 = সারি (5)

# প্রয়োজনীয় সমস্ত উপাদান (গুলি) অনুসন্ধান করুন।

queue1.enqueue ('এ')

queue1.enqueue ('বি')

queue1.enqueue ('সি')

queue1.enqueue ('D')

queue1.enqueue ('E')

queue1.display ()

queue1.enqueue ('F')

মুদ্রণ (সারি 1)

আউটপুট:

প্রতি

ডি

আইএস

সারি পূর্ণ। কোন তীরচিহ্ন সম্ভব

সারি তথ্য (সামনে থেকে পিছনে): একটি বি সি ডি ই

ডি-ক্যু

এখন, আপনি যেমন উপাদানগুলিকে সারিটিতে প্রবেশ / সজ্জিত করেছেন, আপনি সেগুলি সামনে থেকে সরিয়ে / মুছতে চান, সুতরাং আপনার নিম্নলিখিত বিষয়গুলির যত্ন নেওয়া দরকার:

  • কাতারে উপাদান রয়েছে অর্থাত্ পিছনটি -1 এর সমান হওয়া উচিত নয়।
  • দ্বিতীয়ত, আপনার মনে রাখতে হবে যে উপাদানগুলি সামনে থেকে মুছে ফেলা হয় তাই, মোছার পরে সামনের অংশটি পরবর্তী সামনের দিকে নির্দেশ করা উচিত।
  • সামনের অংশটি সারির সমাপ্তি নির্দেশ করা উচিত নয়, সর্বোচ্চ_সাকার সমান।

তো, অ্যালগরিদম কী হবে ??

# সারিটি ফাঁকা আছে কি না তা ডিফ আছে কিনা তা পরীক্ষা করার জন্য_সংশ্লিষ্ট (স্ব): যদি (স্ব .__ পিছন == - 1 বা স্ব .__ সম্মুখ == স্ব। it Def dequeue (self): if (self.is_empty ()): মুদ্রণ ('সারি ইতিমধ্যে খালি') অন্য: তথ্য = স্ব .__ উপাদান [স্ব .__ সম্মুখ] স্ব .__ সম্মুখ + = 1 রিটার্ন ডেটা # ফাংশন থেকে উপাদানগুলি প্রদর্শন করতে সামনের দিকে পিছনে যদি সারিটি খালি ডিএফ প্রদর্শন না থাকে (স্ব): যদি (স্ব.আইস_অ্যাম্পটি () নয়: আমি সীমার জন্য (স্ব। front সম্মুখ, স্ব। rear পিছনে + 1): মুদ্রণ করুন (স্ব। elements উপাদানগুলি [i]) অন্য : মুদ্রণ ('খালি সারি')

এখন আপনি যখন নিম্নলিখিতটি সম্পাদন করেন:

সারি 1 = সারি (5)

# প্রয়োজনীয় সমস্ত উপাদান (গুলি) সন্ধান করুন

queue1.enqueue ('এ')

queue1.enqueue ('বি')

queue1.enqueue ('সি')

queue1.enqueue ('D')

queue1.enqueue ('E')

কখন এই জাভা ব্যবহার করবেন

মুদ্রণ (সারি 1)

# প্রয়োজনীয় সমস্ত উপাদান (গুলি) অনুসন্ধান করুন

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

মুদ্রণ ('শৃঙ্খলাবদ্ধ:', queue1.dequeue ())

# সারিতে থাকা সমস্ত উপাদান প্রদর্শন করুন।

queue1.display ()

আউটপুট:

সারি তথ্য (সামনে থেকে পিছনে): একটি বি সি ডি ই

চিহ্নিত: এ

চিহ্নিত: খ

চিহ্নিত: সি

সিএসএস এবং সিএসএস 3 এর মধ্যে পার্থক্য

চিহ্নিত: ডি

চিহ্নিত: ই

সারি ইতিমধ্যে খালি আছে

চিহ্নিত: কোনটি নয়

খালি সারি

সারি প্রয়োগ

এখন পর্যন্ত, আপনি ইতিমধ্যে সারি এর মূল বিষয়গুলি বুঝতে পেরেছেন। এখন গভীর ডুব দেওয়ার জন্য আমরা এর কয়েকটি প্রয়োগগুলি খতিয়ে দেখব।

  • উদাহরণ 1:

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

ধরুন আপনি অর্ডার ডক 1 এ 3 নথির জন্য প্রিন্ট কমান্ড জারি করেছেন, তারপরে ডক 2 এবং ডক 3 রয়েছে।
নিচের চিত্রের মতো মুদ্রণ সারিটি জনপ্রিয় করা হবে:

ডক-এন, যেখানে ডক হ'ল প্রিন্টিং এবং এন এর জন্য প্রেরিত নথি, নথিতে পৃষ্ঠাগুলির সংখ্যা। উদাহরণস্বরূপ, ডক 2-10 এর অর্থ ডক 2 মুদ্রণ করতে হবে এবং এর 10 পৃষ্ঠা রয়েছে। এখানে একটি কোড যা মুদ্রণ সারি ক্রিয়াকলাপ অনুকরণ করে। কোডটি দেখুন এবং এই প্রয়োগে কীভাবে সারি ব্যবহৃত হয় তা পর্যবেক্ষণ করুন।

শ্রেণি সারি: Def __init __ (স্ব, ম্যাক্স_সাইজ): স্ব .__ ম্যাক্স_সাইজ = সর্বাধিক সাইজ = স্ব .__ ম্যাক্স_সাইজ -১): রিটার্ন রিয়েল রিটার্ন ফালস ডিএফ হ'ল_ম্পটি (স্ব): যদি (স্ব। মুদ্রণ ('সারি পূর্ণ!') অন্যথায়: স্ব .__ রিয়ার + = 1 স্ব। elements উপাদানসমূহ [স্ব। rear পিছন] = ডেটা ডিএফ ডিকুই (স্ব): যদি (স্ব.আইস_অ্যাম্পটি ()): মুদ্রণ ('সারি ফাঁকা!)! !! ') অন্যথায়: ডেটা = স্ব। elements উপাদানসমূহ [স্ব। front সম্মুখ] স্ব .__ সম্মুখ + = 1 রিটার্ন ডেটা ডিএফ প্রদর্শন (স্ব): পরিসীমা ইনডেক্সের জন্য (স্ব। front সম্মুখ, স্ব। rear পিছনে + 1): মুদ্রণ (স্ব। elements উপাদানসমূহ) [সূচক]) ডিফ গেট_ম্যাক্স_সাইজ (স্ব): ফেরত দিন। (সূচক<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()

আউটপুট:

doc1-5 মুদ্রণের জন্য প্রেরণ করা হয়েছে

doc2-3 মুদ্রণের জন্য প্রেরণ করা হয়েছে

doc3-6 মুদ্রণের জন্য প্রেরণ করা হয়েছে

doc1-5 মুদ্রিত

বাকি নেই। প্রিন্টারে পৃষ্ঠাগুলি: 7

doc2-3 মুদ্রিত

বাকি নেই। প্রিন্টারে পৃষ্ঠাগুলি: 4

ডক 3 প্রিন্ট করা যায়নি। প্রিন্টারে পর্যাপ্ত পৃষ্ঠা নেই

  • উদাহরণ 2:

আসুন আমরা আর একটি উদাহরণ বোঝার চেষ্টা করি যা ক্যু ডেটা কাঠামো ব্যবহার করে। আপনি কোডটি বোঝার চেষ্টা করতে পারেন এবং নীচের ফাংশনটি কী বলতে পারে?

  1. ডিফ মজা (এন):
  2. জলজ = সারি (100)
  3. পরিসীমা সংখ্যার জন্য (1, n + 1):
  4. এনকুই (সংখ্যা)
  5. ফলাফল = 1
  6. যখন (না (aqueue.is_empty ())):
  7. num = AQUUE.DEQUEUE ()
  8. ফলাফল * = সংখ্যা
  9. মুদ্রণ (ফলাফল)

যখন ফাংশন মজাদার () n কে পাশ দিয়ে ডাকা হয়,

  • 2 থেকে 4 লাইনগুলিকে 1 থেকে এন পর্যন্ত উপাদানগুলি সারিবদ্ধ করে তোলে
  • 5 থেকে 8 লাইনগুলি একে একে ডি-কুইন করে সেই উপাদানগুলির পণ্যটি সন্ধান করে

এটির সাথে আমরা এই ক্যু ডেটা স্ট্রাকচার নিবন্ধটির শেষের দিকে এসেছি। আপনি যদি নিজেরাই কোডগুলি সাফল্যের সাথে বুঝতে এবং চালিয়ে যান তবে আপনি আর ক্যু ডেটা স্ট্রাকচারের নবাগত নন।

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে এই নিবন্ধের মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।

পাইথনের বিভিন্ন অ্যাপ্লিকেশন সহ গভীরতর জ্ঞান পেতে, আপনি লাইভের জন্য তালিকাভুক্ত করতে পারেন 24/7 সমর্থন এবং আজীবন অ্যাক্সেস সহ।