链堆的修改 使用双链来定义堆结点
/**/
/**********************************************
* 程序员: 郑永丹
* 修改日期: 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>
/// 链堆结点对象
/// </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; }
}
}
}
* 程序员: 郑永丹
* 修改日期: 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>
/// 链堆结点对象
/// </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; }
}
}
}