একটি অ্যারে এবং একটি স্ট্যাকের মধ্যে পার্থক্য কী?


10

উইকিপিডিয়া অনুসারে, একটি স্ট্যাক :

সর্বশেষ, প্রথম আউট (LIFO) বিমূর্ত ডেটা টাইপ এবং লিনিয়ার ডেটা স্ট্রাকচার।

যখন একটি অ্যারে :

উপাদানগুলির একটি সংগ্রহ (মান বা ভেরিয়েবল) সমন্বিত একটি ডেটা স্ট্রাকচার যা প্রতিটি অন্তত একটি অ্যারে সূচক বা কী দ্বারা চিহ্নিত।

আমি যতদূর বুঝতে পারি, এগুলি মোটামুটি মিল similar তাহলে, মূল পার্থক্যগুলি কী কী? যদি সেগুলি একই না হয় তবে একটি অ্যারে কী করতে পারে যা স্ট্যাক এবং তদ্বিপরীত হতে পারে না?


5
আপনি উইকিপিডিয়ায় যা পেয়েছেন তাতে কীভাবে আপনার প্রশ্নের উত্তর দেওয়া হয় না? আপনি যে কোনও ক্রমে অ্যারের উপাদানগুলিতে অ্যাক্সেস করতে পারেন; লাইফের ক্রমে একটি স্ট্যাক অ্যাক্সেস করতে হবে।
কালেব

8
@ কালেব কেবল আপনি কিছু পড়ার অর্থ এই নয় যে আপনি ধারণাটি বুঝতে পেরেছেন। মনে মনে, আমি না জিজ্ঞাসা করা পর্যন্ত আমি এটি পুরোপুরি বুঝতে পারি নি।
ডায়নামিক

3
-1 আপনি মূলত নিজের প্রশ্নের উত্তর পোস্ট করেছেন। আপনি আবার জিজ্ঞাসা করছেন কি?
আন্দ্রেস এফ।

1
@AndresF। আমি এর অর্থ কী তা বুঝতে পারি না ... আপনি যদি কোনও উইকিপিডিয়া নিবন্ধটি দেখেন এবং তারা প্রথমবার কী বলছেন তা বুঝতে পারতেন তবে বিশ্বটি নিখুঁত হবে।
ডায়নামিক

2
আমি কেবল মেটা.প্রোগ্রামারগুলি পড়েছি এবং বুঝতে পেরেছি কেন আপনি এই অ-প্রশ্ন জিজ্ঞাসা করেছেন: এটি একটি প্রতিযোগিতার জন্য। আমি গুরুতরভাবে সন্দেহ করি যে আপনি উইকিপিডিয়া নিবন্ধটি বুঝতে পারেন নি। আপনাকে লজ্জা দেয়: /
অ্যান্ড্রেস এফ।

উত্তর:


45

ঠিক আছে, আপনি অবশ্যই একটি অ্যারের সাথে একটি স্ট্যাক বাস্তবায়ন করতে পারেন। পার্থক্যটি অ্যাক্সেসে রয়েছে। একটি অ্যারেতে, আপনার কাছে উপাদানগুলির একটি তালিকা রয়েছে এবং আপনি যে কোনও সময়ে যে কোনও একটিতে অ্যাক্সেস করতে পারেন। (এক সারিতে রাখা কাঠের ব্লকগুলির একটি গুচ্ছের কথা ভাবুন))

তবে একটি স্ট্যাকের মধ্যে, এলোমেলোভাবে অ্যাক্সেস অপারেশন নেই; শুধুমাত্র আছে Push, Peekএবং Pop, যার মধ্যে সব স্ট্যাকের উপর উপাদান সঙ্গে একচেটিয়াভাবে মোকাবেলা। (চিন্তা করুন কাঠের ব্লকগুলি এখন উল্লম্বভাবে সজ্জিত You


11
কাঠের ব্লক - দুর্দান্ত উপমা
জেসি ব্ল্যাক

1
আপনি "স্ট্যাকে বলুন, এলোমেলোভাবে অ্যাক্সেসের কোনও অপারেশন নেই" তবে আমি একমত নই, এবং আমার উত্তরে আরও বিশদ যুক্ত করব।
স্কট হুইটলক

স্ট্যাকগুলি অবশ্যই এলোমেলো অ্যাক্সেসের সাথে বাস্তবায়িত হয়
old_timer

4
আপনার অবশ্যই জেনগায় চুষতে হবে।
অসন্তুষ্ট গোটটি

1
@ ম্যাসন, আমি জানি এটা একটা রসিকতা ছিল.
অসন্তুষ্ট গোটটি

6

একটি বিশুদ্ধ স্ট্যাক কেবল অনুমোদিত অপারেশন হয় Push, Popএবং Peekকিন্তু বাস্তব পদ, যে ঠিক সত্য নয়। বা বরং, Peekঅপারেশনটি আপনাকে প্রায়শই স্ট্যাকের যে কোনও অবস্থানের দিকে নজর দিতে দেয় তবে ধরা পড়ে এটি স্ট্যাকের এক প্রান্তের সাথে সম্পর্কিত।

সুতরাং, অন্যরা যেমন বলেছে, একটি অ্যারেটি এলোমেলো অ্যাক্সেস এবং সবকিছু অ্যারের শুরুতে উল্লেখ করা হয়

একটি স্ট্যাকের মধ্যে, আপনি কেবল স্ট্যাকের কার্যপ্রান্তে যুক্ত / সরিয়ে ফেলতে পারবেন, তবে আপনার কাছে এখনও এলোমেলো অ্যাক্সেস পড়তে পারে তবে এটি কার্যকরী প্রান্তের সাথে সম্পর্কিত । এটিই মূল পার্থক্য।

উদাহরণস্বরূপ, আপনি যখন কোনও ফাংশনে স্ট্যাকের উপর প্যারামিটারগুলি পাস করেন, কলিগুলিকে সেগুলি দেখার জন্য প্যারামিটারগুলি পপ করতে হবে না। এটি কেবল স্ট্যাকের উপর স্থানীয় ভেরিয়েবলগুলিকে ঠেলে দেয় এবং স্ট্যাক পয়েন্টার থেকে একটি অফসটের উপর ভিত্তি করে সমস্ত স্থানীয় ভেরিয়েবল এবং পরামিতিগুলি উল্লেখ করে। আপনি যদি কেবল একটি অ্যারে ব্যবহার করে থাকেন, তবে কলি তার পরামিতিগুলি কোথায় সন্ধান করবেন তা কীভাবে জানবে? কলিটি সম্পন্ন হয়ে গেলে, এটি তার স্থানীয় ভেরিয়েবলগুলি পপ করে দেয়, একটি ফেরতের মানকে ঠেলে দেয়, কলারের কাছে নিয়ন্ত্রণ ফিরে দেয় এবং কলার রিটার্ন মানটি (যদি কোনও হয়) পপ করে এবং তারপরে স্ট্যাকের বাইরে প্যারামিটারগুলি পপ করে। সৌন্দর্যটি হ'ল এটি আপনার ফাংশন কলগুলিতে (যতক্ষণ না আপনি স্ট্যাকের জায়গাগুলি কমিয়ে দিচ্ছেন না) ধরে নেওয়া যতই বাজে।

এটি একটি বিশেষ ব্যবহার / বাস্তবায়ন, তবে এটি পার্থক্যটি চিত্রিত করে: অ্যারে সর্বদা শুরু থেকেই রেফারেন্স করা হয় তবে স্ট্যাকগুলি সর্বদা কিছু কার্যকারী অবস্থান থেকে রেফারেন্স করা হয়।

স্ট্যাকের একটি সম্ভাব্য বাস্তবায়ন হ'ল একটি অ্যারে প্লাস একটি সূচক যা স্মরণ রাখে কর্মের শেষটি


আমার কাছে এটি উত্তর। অ্যারে এবং স্ট্যাকের মধ্যে পার্থক্য কী তা নিয়ে প্রশ্ন আসে যখন অ্যারে কম সীমাবদ্ধ এবং আরও বহুমুখী বলে মনে হচ্ছে তখন আমাদের কেন স্ট্যাকের প্রয়োজন হবে। এবং এটি এর উত্তর দেয়: এটি ঠিক কারণ স্ট্যাকটি আরও সীমাবদ্ধ কারণ এটি উপযুক্ত ক্ষেত্রে এটি ব্যবহার করা (উদাহরণস্বরূপ এখানে ফাংশন কলগুলি) বাস্তবায়নটিকে যৌক্তিক করে তোলে। হেনকো "দ্য বিউটি"
টোডনলে

4

আমি মনে করি যে এখানে সবচেয়ে বড় বিভ্রান্তি চলছে তা হল বুনিয়াদি ডেটা স্ট্রাকচার বনাম বাস্তবায়ন।

বেশিরভাগ (আরও বেসিক ভাষাগুলিতে) একটি অ্যারে উপাদানগুলির একটি নির্দিষ্ট দৈর্ঘ্যের সেটকে উপস্থাপন করে যা আপনি একটি নির্দিষ্ট সময়ে যে কোনওটিতে অ্যাক্সেস করতে পারবেন। আপনার কাছে এই জাতীয় উপাদানগুলির একটি গুচ্ছ রয়েছে তা আপনাকে কীভাবে এটি ব্যবহার করার কথা বলে সে সম্পর্কে কিছুই জানায় না (এবং প্রকৃতপক্ষে কোনও কম্পিউটার আপনি কীভাবে এটি ব্যবহার করবেন তা জানেন না / ততক্ষণ আপনি ব্যবহার লঙ্ঘন করবেন না)।

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

আপনি বিভিন্ন ধরণের ডেটা স্ট্রাকচারের বাইরে স্ট্যাক তৈরি করতে পারেন: অ্যারেগুলি (কিছুটা সর্বাধিক আকার সহ), গতিশীল অ্যারেগুলি (স্থানের বাইরে গেলে বাড়তে পারে) বা লিঙ্কযুক্ত তালিকাগুলি। ব্যক্তিগতভাবে আমি অনুভব করি যে একটি লিঙ্কযুক্ত তালিকাটি স্ট্যাকের সীমাবদ্ধতাগুলিকে সেরা উপস্থাপন করে কারণ আপনাকে প্রথম উপাদানটির বাইরে কিছু দেখার চেষ্টা করতে হবে এবং সামনের দিকে যুক্ত করা এবং সামনে থেকে অপসারণ করা খুব সহজ।

সুতরাং আপনি একটি স্ট্যাক তৈরি করতে একটি অ্যারে ব্যবহার করতে পারেন, তবে সেগুলি সমতুল্য নয়


3

তাদের দায়িত্ব পৃথক:

  • স্ট্যাক অবশ্যই স্ট্যাকের মধ্যে উপাদানগুলি পপ করতে সক্ষম হবে এবং স্ট্যাক থেকে উপাদানগুলিকে ধাক্কা দিতে সক্ষম হবে, সুতরাং এটির সাধারণত পদ্ধতি Pop()এবং কেন রয়েছেPush()

  • অ্যারের দায়িত্ব একটি নির্দিষ্ট সূচকে উপাদান পাওয়া / সেট করা


3

আপনি কোনও এ \ অ্যারের সূচক থেকে কোনও আইটেম উদ্ধার করতে পারেন।

স্ট্যাকের সাহায্যে, আপনি স্ট্যাক এ এর ​​মাঝখানে একটি আইটেম পুনরুদ্ধার করতে পারেন, অন্য স্ট্যাক ব্যবহার করে: বি।

আপনি এ এর ​​শীর্ষ আইটেমটি নিয়ে যাচ্ছেন এবং এ এর ​​পছন্দসই আইটিতে না আসা পর্যন্ত এটি বিতে রেখে দিন, তারপর আপনি বি থেকে আইটেমগুলি স্ট্যাক এ এর ​​শীর্ষে রেখে দিন A.

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

আপনি "লাস্ট ইন, ফার্স্ট আউট" আচরণ চান এমন পরিস্থিতিতে, একটি স্ট্যাক আপনাকে অ্যারের চেয়ে কম ওভারহেড দেবে।


0

তারা "খুব অনুরূপ" বলে আমি এতদূর যেতে পারতাম না।

একটি অ্যারে এমন জিনিস রাখার জন্য ব্যবহৃত হয় যা পরে ক্রমান্বয়ে বা সূচকের মাধ্যমে অ্যাক্সেস করা হবে। ডেটা স্ট্রাকচারটি কোনও প্রকারের অ্যাক্সেস পদ্ধতির (FIFO, LIFO, FILO, ইত্যাদি ...) বোঝায় না তবে আপনি চাইলে এটি সেভাবে ব্যবহার করা যেতে পারে।

স্ট্যাক হ'ল জিনিসগুলি তৈরি হওয়ার সাথে সাথে তার ট্র্যাক করার উপায়। একটি অ্যাক্সেস পদ্ধতি তৈরি করা হয়েছে তা নির্ভর করে / প্রয়োজনীয় স্ট্যাকের ধরণের উপর নির্ভর করে। একটি ফ্রেম স্ট্যাক একটি লাইফোর উদাহরণ হতে পারে। দাবি অস্বীকার - আমি এখানে আমার ডেটা স্ট্রাকচার শ্রেণীবিন্যাসকে মিশ্রিত করছি এবং একটি স্ট্যাক সত্যিই কেবল লাইফোর অনুমতি দিতে পারে। এটি অন্যথায় কাতারের ভিন্ন ধরণের হবে।

সুতরাং আমি স্ট্যাক হিসাবে একটি অ্যারে ব্যবহার করতে পারি (যদিও আমি চাই না) তবে আমি অ্যারে হিসাবে একটি স্ট্যাক ব্যবহার করতে পারি না (যদি না আমি এটিতে কঠোর পরিশ্রম করি)।


1
'অবজেক্ট সংগ্রহের জন্য কাঠামোগত স্ট্রাকচার' এর ডোমেনে, আমি বলব না যে এগুলি খুব অনুরূপ। প্রোগ্রামিং ধারণার ডোমেনে, আমি বলব যে তারা মোটামুটি একই রকম। জিনিসগুলির ডোমেনে সাধারণত আমি বলব যে তারা প্রায় অভিন্ন।
কर्क ব্রডহર્স্ট

0

একটি অ্যারের ডেটা কোনও কী বা সূচক দ্বারা অ্যাক্সেস করা যেতে পারে। স্ট্যাকের উপাত্তটি পপআপ করার পরে কোনও স্ট্যাকের ডেটা অ্যাক্সেস করা যায়। এর অর্থ হ'ল কোনও অ্যারে থেকে ডেটা অ্যাক্সেস করা সহজ তবে যদি আপনি এর সূচকটি জানেন। স্ট্যাক থেকে ডেটা অ্যাক্সেস করার অর্থ আপনি যা খুঁজছিলেন তা না পাওয়া পর্যন্ত আপনাকে পপিং উপাদানগুলি রাখতে হবে, যার অর্থ ডেটা অ্যাক্সেস বেশি সময় নিতে পারে।


0

একটি অ্যারে প্রোগ্রামার দৃষ্টিকোণ থেকে, জায়গা এবং আকারে স্থির, আপনি জানেন যে আপনি এটি কোথায় এবং পুরো জিনিসটি কোথায়। আপনার এটির সকলের অ্যাক্সেস রয়েছে।

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.