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