На C# по описанию ffinder'a:
public class LinkedStack<T>
{
private class LinkedStackItem<T>
{
public LinkedStackItem(T item, LinkedStackItem<T> parent)
{
Value = item;
Parent = parent;
}
public T Value { get; private set; }
public LinkedStackItem<T> Parent { get; private set; }
}
private LinkedStackItem<T> _current;
public int Count { get; private set; }
public void Push(T item)
{
_current = new LinkedStackItem<T>(item, _current);
Count++;
}
public T Pop()
{
if (Count > 0)
{
T val = _current.Value;
Count--;
_current = _current.Parent;
return val;
}
throw new InvalidOperationException("В стеке отсутствуют элементы!");
}
public T Peak()
{
if (Count > 0)
{
return _current.Value;
}
throw new InvalidOperationException("В стеке отсутствуют элементы!");
}
}