मैंने साक्षात्कार की शर्तों के तहत इसे तुरंत लिखा, मैं इसे समुदाय में पोस्ट करना चाहता था ताकि संभवतः यह देखने के लिए कि क्या इसके बारे में जाने के लिए एक बेहतर/तेज़/क्लीनर तरीका था। इसे कैसे अनुकूलित किया जा सकता है?एक स्टैक के इस सी # कार्यान्वयन के साथ कोई समस्या देखें?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Stack
{
class StackElement<T>
{
public T Data { get; set; }
public StackElement<T> Below { get; set; }
public StackElement(T data)
{
Data = data;
}
}
public class Stack<T>
{
private StackElement<T> top;
public void Push(T item)
{
StackElement<T> temp;
if (top == null)
{
top = new StackElement<T>(item);
}
else
{
temp = top;
top = new StackElement<T>(item);
top.Below = temp;
}
}
public T Pop()
{
if (top == null)
{
throw new Exception("Sorry, nothing on the stack");
}
else
{
T temp = top.Data;
top = top.Below;
return temp;
}
}
public void Clear()
{
while (top != null)
Pop();
}
}
class TestProgram
{
static void Main(string[] args)
{
Test1();
Test2();
Test3();
}
private static void Test1()
{
Stack<string> myStack = new Stack<string>();
myStack.Push("joe");
myStack.Push("mike");
myStack.Push("adam");
if (myStack.Pop() != "adam") { throw new Exception("fail"); }
if (myStack.Pop() != "mike") { throw new Exception("fail"); }
if (myStack.Pop() != "joe") { throw new Exception("fail"); }
}
private static void Test3()
{
Stack<string> myStack = new Stack<string>();
myStack.Push("joe");
myStack.Push("mike");
myStack.Push("adam");
myStack.Clear();
try
{
myStack.Pop();
}
catch (Exception ex)
{
return;
}
throw new Exception("fail");
}
private static void Test2()
{
Stack<string> myStack = new Stack<string>();
myStack.Push("joe");
myStack.Push("mike");
myStack.Push("adam");
if (myStack.Pop() != "adam") { throw new Exception("fail"); }
myStack.Push("alien");
myStack.Push("nation");
if (myStack.Pop() != "nation") { throw new Exception("fail"); }
if (myStack.Pop() != "alien") { throw new Exception("fail"); }
}
}
}
मैं 'स्टैक एलिमेंट' रैपर की आवश्यकता के बारे में थोड़ा सा संदेह कर रहा हूं। – ChaosPandion
@ChosPandion: यह वास्तव में एक लिंक-सूची है। – SLaks
एक बहुत ही मामूली बात, उत्तर के लायक नहीं - मैं स्टैकएलेमेंट क्लास को स्टैक का एक निजी नेस्टेड क्लास बनाउंगा। –