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

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

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



ডেটা স্ট্রাকচার কেন?

এর উত্তর দিতে আপনাকে একটি বড় স্তরের চিন্তা করতে হবে। গুগল মানচিত্র কীভাবে সেকেন্ডের ভগ্নাংশে আপনাকে সর্বোত্তম রুট দেখায়, কীভাবে এটি মাইক্রোসেকেন্ডগুলিতে আপনাকে অনুসন্ধানের ফলাফল দেয় তা ভাবুন Think এটি কেবল 100 টি ওয়েবসাইটের সাথে ডিল করে না, এটি এক বিলিয়নেরও বেশি সাইটের সাথে ডিল করে এবং এখনও আপনাকে এত তাড়াতাড়ি ফলাফল দেখায়।



উইন্ডোতে কীভাবে পিএইচপি ইনস্টল করবেন

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

ডেটা স্ট্রাকচারের প্রকারগুলি

কিছু মানক ডেটা স্ট্রাকচার রয়েছে যা ডেটা দিয়ে দক্ষতার সাথে কাজ করতে ব্যবহার করা যেতে পারে। আমরা এমনকি তাদের প্রয়োগ করতে বা আমাদের অ্যাপ্লিকেশন অনুসারে সম্পূর্ণ নতুন তৈরি করতে পারি।



ডেটা-স্ট্রাকচারের প্রকারগুলি

স্ট্যাক ডেটা স্ট্রাকচার কী?

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

  • কার্গো চালান
  • একটি ট্রেতে প্লেটস
  • কয়েন স্ট্যাক
  • ড্রয়ারের স্ট্যাক
  • রেলওয়ে উঠানে ট্রেন থামানো

plates-stacks-data-structure



এই সমস্ত উদাহরণ অনুসরণ করে a শেষ-প্রথম-আউট কৌশল। একটি ট্রেতে প্লেটগুলি বিবেচনা করুন, আপনি যখন কোনও প্লেট বাছাই করতে চান তখন আপনাকে উপর থেকে একটি প্লেট বাছাই করতে বাধ্য করা হবে যখন প্লেটগুলি ট্রেতে রাখা হয়েছিল তখন তাদের অবশ্যই বিপরীত ক্রমে থাকতে হবে। উপরোক্ত উদাহরণ যা অনুসরণ করে সর্বশেষ-প্রথম-আউট (LIFO) নীতি হিসাবে পরিচিত হয় স্ট্যাক

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

  1. স্ট্যাকের শীর্ষে কোনও উপাদানটি পুশ বা sertোকান
  2. স্ট্যাকের শীর্ষ থেকে কোনও উপাদান পপ করুন বা সরান

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

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

স্ট্যাকের প্রাথমিক অবস্থা চিত্রটিতে দেখা যাবে যেখানে সর্বোচ্চ_সাইজ = 5

স্ট্যাকের মধ্যে এলিমেন্ট পুশ করুন

এখন, আপনি যদি স্ট্যাকের মধ্যে উপাদান প্রবেশ করতে বা চাপতে চান তবে আপনাকে এটি মনে রাখতে হবে

  • শীর্ষটি সূচকটি নির্দেশ করবে যেখানে উপাদানটি সন্নিবেশ করা হবে।
  • এবং স্ট্যাক পূর্ণ হলে কোনও উপাদান beোকানো হবে না যখন সর্বোচ্চ_সাইজ = শীর্ষে থাকে।

তাহলে অ্যালগরিদমটি কী হওয়া উচিত ??

# সর্বাধিক আকারের স্ট্যাক ডিফ গেট_ম্যাক্স_সাইজ (স্ব) প্রদান করে: স্ব-প্রত্যাবর্তন করুন __ সর্বোচ্চ_ সাইজ # স্ট্যাক পূর্ণ কিনা তা মান মূল্য দেয়, পূর্ণ যদি সত্য এবং মিথ্যা অন্যথায় Def হয়_ফুল (স্ব): রিটার্ন সেল.গেট_ম্যাক্স_সাইজ () - 1 == স্ব .__ শীর্ষ # স্ট্যাক ডিফ পুশ (স্ব, ডেটা) এর শীর্ষে উপাদানকে চাপায়: যদি (স্ব.আইস_ফুল ()): মুদ্রণ ('স্ট্যাক ইতিমধ্যে পূর্ণ'): স্ব .__ শীর্ষ = স্ব .__ শীর্ষ + ইন (1 ) স্ব। elements উপাদানসমূহ [স্ব। শীর্ষস্থানীয়] = ডেটা # ডিএফ __str __ (স্ব): ডিবাগ করার সময় ডিএস অবজেক্টের উপাদানগুলি মুদ্রণ করতে আপনি নীচের __str __ () ব্যবহার করতে পারেন: = = [] সূচক = স্ব। 0): msg.append ((str) (স্ব। Elements উপাদানসমূহ [সূচক])) সূচক- = 1 msg = '' .জয়েন (চিত্র) # = 'স্ট্যাক ডেটা (উপরে থেকে নীচে):' + msg রিটার্ন

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

স্ট্যাক 1 = স্ট্যাক (4)

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

stack1.push ('এ')

stack1.push ('বি')

stack1.push ('সি')

stack1.push ('ই')

মুদ্রণ (stack1.is_full ())

মুদ্রণ (স্ট্যাক 1)

আউটপুট:

স্ট্যাক ইতিমধ্যে পূর্ণ
সত্য
স্ট্যাক ডেটা (উপরে থেকে নীচে): ডি সি বি এ

স্ট্যাক থেকে পপ উপাদানসমূহ

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

  • স্ট্যাক খালি নয় অর্থাত্ শীর্ষস্থানীয় = = -1
  • আপনি যখন ডেটা মুছবেন তখন শীর্ষটিকে অবশ্যই স্ট্যাকের পূর্বের শীর্ষে নির্দেশ করতে হবে।

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

# স্টুলটি ফাঁকা হোক বা না হউক মূল মূল্য পুনরুদ্ধার করুন, খালি এবং মিথ্যা অন্যথায় যদি Def হয়_সেম্পটি (স্ব): ফিরে আসুন __ শীর্ষস্থানীয় == - 1 # পুনরায় পপড মান ডিপ পপ (স্ব): যদি (স্ব.আইস_এম্পটি ()): মুদ্রণ করুন ('পপ করার জন্য কিছুই নেই, ইতিমধ্যে খালি') অন্য: এ = স্ব .__ উপাদান [স্ব। top শীর্ষ] স্ব .__ শীর্ষ = স্ব .__ শীর্ষ -1 একটি # ফিরে থেকে নীচে ডিএফ প্রদর্শন (স্ব) -এ সমস্ত স্ট্যাক উপাদান প্রদর্শন করুন: আমি সীমার মধ্যে (স্ব। top শীর্ষ, -১, -১): মুদ্রণ (স্ব। elements উপাদানসমূহ [i], শেষ = '') মুদ্রণ ()

এখন, পূর্বে তৈরি স্ট্যাক বিবেচনা করে, উপাদানগুলি পপ করার চেষ্টা করুন

মুদ্রণ (stack1.pop ())

মুদ্রণ (stack1.pop ())

মুদ্রণ (স্ট্যাক 1)

মুদ্রণ (stack1.pop ())

মুদ্রণ (stack1.pop ())

মুদ্রণ (stack1.pop ())

আউটপুট:

ডি

স্ট্যাক ডেটা (উপরে থেকে নীচে): বি এ

প্রতি

পপ করার কিছুই নেই, ইতিমধ্যে খালি

স্ট্যাক ডেটা স্ট্রাকচারের অ্যাপ্লিকেশন

  • উদাহরণ 1:

পাটিগণিতের এক্সপ্রেশন মূল্যায়নের জন্য ব্র্যাককেট ম্যাচিং অ্যালগরিদম এবং পদ্ধতি কল প্রয়োগের ক্ষেত্রেও একটি স্ট্যাক ব্যবহার করা হয়।

জাভাতে মিনি হ্যাপ প্রয়োগ করুন

যার উত্তর 5।

  • উদাহরণ 2:

উইন্ডোজ ক্লিপবোর্ড পূর্বাবস্থায় ফেরানো (ctrl + z, ctrl + y) ক্রিয়াকলাপ প্রয়োগ করতে দুটি স্ট্যাক ব্যবহার করে। আপনি উইন্ডোজ ওয়ার্ড এডিটরগুলিতে যেমন এমএস-ওয়ার্ড, নোটপ্যাড ইত্যাদিতে কাজ করতে পারেন এখানে এমএস-ওয়ার্ডে একটি লেখা লেখা আছে। Ctrl-Z এবং Ctrl-Y ক্লিক করে পাঠ্যটি কীভাবে পরিবর্তিত হয়েছে তা পর্যবেক্ষণ করুন।

এখানে একটি কোড যা পূর্বাবস্থায় ফেরানো অপারেশনকে অনুকরণ করে। কোডটি দেখুন এবং এই বাস্তবায়নে স্ট্যাকটি কীভাবে ব্যবহৃত হয় তা পর্যবেক্ষণ করুন।

# ক্রিয়েটিং ক্লাস স্ট্যাক ক্লাস স্ট্যাক: ডিএফ __init __ (স্ব, সর্বোচ্চ_সাইজ): স্ব .__ সর্বোচ্চ_সাইজ = সর্বোচ্চ_সাইজ সেল্ফ .__ উপাদানগুলি [[কোনও নয়] * স্ব .__ সর্বোচ্চ_সাইজ সেল্ফ .__ শীর্ষ = -1 ডিফ ইজ_ফুল (স্ব): যদি (স্ব .__ শীর্ষ ==) স্ব .__ সর্বাধিক সাইজ -১): প্রত্যাবর্তন সত্যিকারের প্রত্যাবর্তন মিথ্যা ডিএফ হয়_সেম্পটি (স্ব): যদি (স্ব। ('স্ট্যাক পূর্ণ!') অন্যথায়: স্ব .__ শীর্ষ + = 1 স্ব .__ উপাদান [স্ব। __ শীর্ষ] = ডেটা ডিপ পপ (স্ব): যদি (স্ব.আইস_এম্পটি ()): মুদ্রণ ('স্ট্যাকটি খালি! ! ') অন্যথায়: ডেটা = স্ব। elements উপাদানসমূহ [স্ব। top শীর্ষ] স্ব .__ শীর্ষ- = 1 রিটার্ন ডেটা ডিএফ প্রদর্শন (স্ব): যদি (স্ব.আইস_এম্পটি ()): মুদ্রণ (' স্ট্যাকটি ফাঁকা ') অন্য: সূচক = স্ব .__ শীর্ষ সময় (সূচী> = 0): মুদ্রণ করুন (স্ব। elements উপাদানসমূহ [সূচক]) সূচক- = 1 ডিফ গেট_ম্যাক্স_সাইজ (স্ব): ফিরে আসুন __ সর্বোচ্চ_ আকার # আপনি নীচের উপাদানগুলি মুদ্রণ করতে __str __ () ব্যবহার করতে পারেন ডিএফ অবজেক্ট ডিবাগ করার সময় ডিএফ __str __ (স্ব): চিত্র = [] সূচক = স্ব। While শীর্ষ যখন (সূচক> = 0): msg.append ((আরআরটি) (স্ব। Elements উপাদানসমূহ [সূচী])) সূচক- = 1 # = ' '.join (msg) msg ​​=' স্ট্যাক ডেটা (উপরে থেকে নীচে): '+ msg ফেরত এমএস জি # ফাংশন অপসারণ বা ব্যাকস্পেস অপারেশন ডিফ রিমুভ বাস্তবায়ন (): গ্লোবাল ক্লিপবোর্ড, পূর্বাবস্থায় ফিরিয়ে আনুন স্ট্যাক ডেটা = ক্লিপবোর্ড [লেন (ক্লিপবোর্ড) -1] ক্লিপবোর্ড.মরাও (ডেটা) Undo_stack.push (ডেটা) মুদ্রণ ('সরান:', ক্লিপবোর্ড) পূর্বাবস্থায় ফিরিয়ে আনতে ডিফ ফিউন (): বিশ্বব্যাপী ক্লিপবোর্ড, পূর্বাবস্থায় ফেলা, পুনরায়_স্ট্যাক যদি (পূর্বাবস্থায় ফেলা.আইস_অম্পটি ()): মুদ্রণ ('পূর্বে ফেরাতে কোনও ডেটা নেই'): তথ্য = Undo_stack.pop () ক্লিপবোর্ড.এপেন্ড ( ডেটা) redo_stack.push (তথ্য) মুদ্রণ ('পূর্বাবস্থায়:', ক্লিপবোর্ড) পুনরায় অপারেশন বাস্তবায়নের জন্য ডিফ রিডো (): বিশ্বব্যাপী ক্লিপবোর্ড, পূর্বাবস্থায় স্ট্যাক, redo_stack যদি (redo_stack.is_empty ()): মুদ্রণ ('কোনও তথ্য নেই to redo ') অন্যথায়: ডেটা = redo_stack.pop () যদি (ডেটা ক্লিপবোর্ডে নেই): মুদ্রণ করুন (' পুনরায় করার কোনও ডেটা নেই ') redo_stack.push (ডেটা) অন্য: ক্লিপবোর্ড.আরমোভ (ডেটা) undo_stack.push ( ডেটা) মুদ্রণ ('পুনরায়:', ক্লিপবোর্ড) ক্লিপবোর্ড = ['এ', 'বি', 'সি', 'ডি', 'ই', 'এফ'] Undo_stack = স্ট্যাক (লেন (ক্লিপবোর্ড)) redo_stack = স্ট্যাক (লেন (ক্লিপবোর্ড)) সরান () পূর্বাবস্থায় ফেরা () পুনরায় করুন ()

আউটপুট:

সরান: [‘এ’, ‘বি’, ‘সি’, ‘ডি’, ‘ই’]

পূর্বাবস্থায়: [‘এ’, ‘বি’, ‘সি’, ‘ডি’, ‘ই’, ‘এফ’]

আবার করুন: [‘এ’, ‘বি’, ‘সি’, ‘ডি’, ‘ই’]

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

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

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