Реализация стека - C#
Формулировка задачи:
Здравствуйте!
По заданию требуется реализовать двусвязный стек. Помогите пожалуйста дописать двусвязность. Уже несколько дней не могу догнать как это сделать.
public class MyStack
{
public string data;
public MyStack L;
public MyStack R;
public MyStack()
{
this.L = null;
this.R = null;
}
public MyStack(MyStack ob)
{
this.data = ob.data;
this.L = ob.L;
this.R = ob.R;
}
public void Push(string _data)
{
MyStack Temp = new MyStack();
Temp.data = _data;
Temp.L = this.L;
this.L = Temp;
this.R = new MyStack(this);
}
public void Pop()
{
if (this.L == null)
return;
MyStack Temp = this.L;
this.L = Temp.L;
this.R = null;
Temp = null;
}
public string Top()
{
if (this.L == null)
return "";
else
return this.L.data;
}
public bool IsEmpty()
{
return (this.L == null);
}
public void ShowOnDataGridView(DataGridView dataGridView)
{
DataGridViewInit(dataGridView);
int i = 0;
if (this.L == null)
MessageBox.Show("Stack is empty!!1");
else
{
MyStack Temp = this.L;
while (Temp != null)
{
dataGridView.Rows.Add(++i, Temp.data);
Temp = Temp.L;
}
}
}Решение задачи: «Реализация стека»
textual
Листинг программы
public class Node
{
public object Data { get; set; }
public Node Next { get; set; }
public Node(object d)
{
this.Data = d;
}
public void AddNextNode(object d)
{
Node node = this;
Node newNode = new Node(d);
while (node.Next != null)
{
node = node.Next;
}
node.Next = newNode;
}
}
public class Stack
{
private Node _top = null;
public int Count
{
get;
private set;
}
public Stack()
{
this.Count = 0;
}
public void Push(object obj)
{
Node newNode = new Node(obj);
if (_top == null)
_top = newNode;
else
{
Node temp = _top;
_top = newNode;
_top.Next = temp;
}
Count++;
}
public object Pop()
{
Node objToPop = _top;
_top = _top.Next;
Count--;
return objToPop.Data;
}
public void Clear()
{
_top = null;
Count = 0;
}
}