একটি সাক্ষাত্কারের জন্য আমাকে দেওয়া সবচেয়ে আকর্ষণীয় কোডিং চ্যালেঞ্জগুলির মধ্যে একটি হ'ল কার্যকরী সারি তৈরি করা। প্রয়োজনীয়তাটি ছিল প্রতিটি সারিবদ্ধ কলের জন্য একটি নতুন সারি তৈরি হবে যা পুরাতন সারি এবং লেবেলে নতুন আইটেমকে ধারণ করে। Dequeue একটি নতুন সারি এবং অদৃশ্য আইটেমটিকে আউট প্যারাম হিসাবে ফিরিয়ে দেবে।
এই বাস্তবায়ন থেকে একটি আইনিউমারেটর তৈরি করা উত্তরোত্তর। এবং আমি আপনাকে একটি ফাংশনাল কুইউ বাস্তবায়ন করতে বলি যা একটি পারফরম্যান্ট ফাংশনাল স্ট্যাক (স্ট্যাক পুশ / পপ উভয়ই লেজটিতে কাজ করে, একটি সারিতে এনেকু লেজের উপর কাজ করে, ডেকিউ মাথায় কাজ করে) কার্যকর করার চেয়ে অনেক বেশি কঠিন is
আমার বক্তব্যটি ... আপনার নিজের পয়েন্টার মেকানিজম (স্ট্যাকনোড <টি>) প্রয়োগ করে এবং এনুমরেটরটিতে ক্রিয়ামূলক শব্দার্থক শব্দ ব্যবহার করে একটি ননডেস্ট্রাক্টিভ স্ট্যাক এনুমুলেটর তৈরি করা তুচ্ছ।
public class Stack<T> implements IEnumerator<T>
{
private class StackNode<T>
{
private readonly T _data;
private readonly StackNode<T> _next;
public StackNode(T data, StackNode<T> next)
{
_data=data;
_next=next;
}
public <T> Data{get {return _data;}}
public StackNode<T> Next{get {return _Next;}}
}
private StackNode<T> _head;
public void Push(T item)
{
_head =new StackNode<T>(item,_head);
}
public T Pop()
{
//Add in handling for a null head (i.e. fresh stack)
var temp=_head.Data;
_head=_head.Next;
return temp;
}
///Here's the fun part
public IEnumerator<T> GetEnumerator()
{
//make a copy.
var current=_head;
while(current!=null)
{
yield return current.Data;
current=_head.Next;
}
}
}
কিছু বিষয় লক্ষণীয়। স্টেটমেন্টের বর্তমানের আগে ধাক্কা দিতে বা পপ করার জন্য একটি কল = _হেড; সম্পূর্ণরূপে আপনাকে গণনার জন্য আলাদা স্ট্যাক দেবে যদি কোনও মাল্টিথ্রেডিং না থাকে (আপনি এটির বিরুদ্ধে সুরক্ষার জন্য রিডার রাইটারলক ব্যবহার করতে পারেন)। আমি স্ট্যাকনোডে ক্ষেত্রগুলি কেবল পঠনযোগ্যভাবে তৈরি করেছি তবে অবশ্যই যদি টি একটি পরিবর্তনীয় অবজেক্ট হয় তবে আপনি এর মানগুলি পরিবর্তন করতে পারেন। আপনি যদি এমন স্ট্যাক কনস্ট্রাক্টর তৈরি করতে চান যা স্ট্যাকনোডকে প্যারামিটার হিসাবে গ্রহণ করে (এবং নোডে যে পাসের দিকে এগিয়ে যায়)। এইভাবে নির্মিত দুটি স্ট্যাক একে অপরের উপর প্রভাব ফেলবে না (আমি যেমনটি উল্লেখ করেছি তেমন একটি পরিবর্তনীয় টি ব্যতীত)। আপনি একটি স্ট্যাকের মধ্যে যা যা চান সব পুশ এবং পপ করতে পারেন, অন্যটি পরিবর্তন হবে না।
এবং আমার বন্ধুটি হ'ল আপনি কীভাবে একটি স্ট্যাকের অ-ধ্বংসাত্মক গণনা করেন।