
/**//**********************************************
* 程序員: 鄭永丹
* 修改日期: 2007-10-16
* 程序內容:
* 雙鏈堆棧類
*
*
*
* **********************************************/
using System;
using System.Collections.Generic;
using System.Text;
namespace MyClassLibrary.Link
...{
/**//// <summary>
/// 泛型堆棧類
/// </summary>
/// <typeparam name="T"></typeparam>
public class LinkStack<T>
...{
/**//// <summary>
/// 泛型堆棧類 構造函數
/// </summary>
public LinkStack()
...{ }
private int stackLength = 0; //堆棧長度
private LinkStackNode<T> FirstNode = null; //堆棧頭
private LinkStackNode<T> EndNode = null; //堆棧尾 


/**//// <summary>
/// 堆棧長度
/// </summary>
public int StackLength
...{
get ...{ return stackLength; }
}

/**//// <summary>
/// 入棧
/// </summary>
/// <param name="NodeValue">結點值</param>
public void Push(T NodeValue)
...{
LinkStackNode<T> StackNode = new LinkStackNode<T>();
StackNode.NodeValue = NodeValue;
if (stackLength == 0)
...{
FirstNode.NextNode = StackNode;
EndNode = StackNode;
++stackLength;
}
else
...{
EndNode.NextNode = StackNode;
EndNode = StackNode;
++stackLength;
}
}

/**//// <summary>
/// 出棧
/// </summary>
/// <returns>結點值</returns>
public T Pop()
...{
if (stackLength == 0) return default(T);
T reT = EndNode.NodeValue;

--stackLength;
EndNode = EndNode.LastNode ;
return reT;
}
}
/// 鏈堆結點對象
/// </summary>
/// <typeparam name="T"></typeparam>
internal class LinkStackNode<T>
...{
/**//// <summary>
/// 鏈堆結點對象 構造函數
/// </summary>
public LinkStackNode()
...{ }
private T nodeValue = default(T); //結點對象
private LinkStackNode<T> nextNode = null; // 結點對應的下一結點地址
private LinkStackNode<T> lastNode = null; //上一結點
/**//// <summary>
/// 結點對應的上一結點地址
/// </summary>
internal LinkStackNode<T> LastNode
...{
get ...{ return lastNode; }
set ...{ lastNode = value; }
}

/**//// <summary>
/// 結點對應的下一結點地址
/// </summary>
internal LinkStackNode<T> NextNode
...{
get ...{ return nextNode; }
set ...{ nextNode = value; }
}

/**///// <summary>
/// 結點的值
/// </summary>
internal T NodeValue
...{
get ...{ return nodeValue; }
set ...{ nodeValue = value; }
}
}
}