• 数据结构 -- 链式队列


    队列:先进先出的数据结构

    C#版本:

      1 namespace Queue
      2 {
      3     interface IQueue<T>
      4     {
      5         /// <summary>入队操作</summary>
      6         bool EnQueue(T _data);
      7         /// <summary>出队操作</summary>
      8         bool DeQueue(ref T _data);
      9         /// <summary>取队头元素</summary>
     10         bool GetFront(ref T _data);
     11         /// <summary>获取队列长度</summary>
     12         int QueueLength();
     13         /// <summary>是否为空</summary>
     14         bool IsEmpty();
     15         /// <summary>清空队列</summary>
     16         void Clear();
     17         /// <summary>是否满</summary>
     18         bool IsFull();
     19     }
     20 
     21     class QueueNode<T>
     22     {
     23         #region 成员属性
     24         private T data; //数据
     25         private QueueNode<T> next;  //指针
     26         #endregion
     27         #region 公开属性
     28         public T Data
     29         {
     30             get
     31             {
     32                 return data;
     33             }
     34             set
     35             {
     36                 data = value;
     37             }
     38         }
     39         public QueueNode<T> Next;
     40         #endregion
     41 
     42         #region 构造函数
     43         public QueueNode()
     44         {
     45             Data = default(T);
     46             Next = null;
     47         }
     48         public QueueNode(T _data = default(T),QueueNode<T> _next = null)
     49         {
     50             Data = _data;
     51             Next = _next;
     52         }
     53         #endregion
     54     }
     55 
     56 
     57     /// <summary>链式队列 </summary>
     58     class LinkQueue<T> : IQueue<T>
     59     {
     60         #region 成员属性
     61         private QueueNode<T> front; //队列头指示器
     62         private QueueNode<T> rear;  //队列尾指示器
     63         private int nodeNum;       //队列节点个数
     64         #endregion
     65 
     66         #region 访问函数   
     67         public LinkQueue()
     68         {
     69             front = null;
     70             rear = null;
     71             nodeNum = 0;
     72         }
     73 
     74         /// <summary>入队操作,数据保存在_data中</summary>
     75         public bool EnQueue(T _data)
     76         {
     77             if (IsFull())
     78                 return false;
     79 
     80             QueueNode<T> q = new QueueNode<T>(_data);
     81             if (IsEmpty())
     82             {
     83                 front = q;
     84                 rear = q;
     85             }
     86             else
     87             {
     88                 rear.Next = q;
     89                 rear = q;
     90             }
     91             ++nodeNum;
     92 
     93             return true;
     94         }
     95 
     96         /// <summary>出队操作,数据保存在_data中</summary>
     97         public bool DeQueue(ref T _data)
     98         {
     99             if (IsEmpty())
    100                 return false;
    101 
    102             _data = front.Data;
    103             front = front.Next;
    104 
    105             if (front == null)
    106                 rear = null;
    107 
    108             --nodeNum;
    109             return true;   
    110         }
    111 
    112         /// <summary>获取队头元素值操作,数据保存在_data中</summary>
    113         public bool GetFront(ref T _data)
    114         {
    115             if (IsEmpty())
    116                 return false;
    117             _data = front.Data;
    118             return true;
    119         }
    120 
    121         /// <summary>返回队列是否为空</summary>
    122         public bool IsEmpty()
    123         {
    124             if (front == rear && 0 == nodeNum)
    125                 return true;
    126             return false;
    127         }
    128 
    129         /// <summary>返回队列是否满</summary>
    130         public bool IsFull()
    131         {
    132             return false;
    133         }
    134 
    135         /// <summary>返回队列长度</summary>
    136         public int QueueLength()
    137         {
    138             return nodeNum;
    139         }
    140 
    141         /// <summary>清空队列</summary>
    142         public void Clear()
    143         {
    144             front = rear = null;
    145             nodeNum = 0;
    146         }
    147 
    148         #endregion
    149     }
    150 }
  • 相关阅读:
    MSSQL2005和Access在SQL的某一种写法上的区别。update的一种写法不一致。
    博客园 记录 了解多一点
    马克斯4.0 采集规则的编写
    谷歌代码托管 GoogleCode中 关于 版本的一个写法
    晒晒名企大公司的工资收入
    Asp.net中DataBinder.Eval用法的总结
    Mastering Debugging in Visual Studio 2010 A Beginner's Guide
    Solution Configuration but not Platform in VS2010 Toolbar
    window.showdialog完全手册,解决模态窗口,传值和返回值问题
    从此不再惧怕URI编码:JavaScript及C# URI编码详解
  • 原文地址:https://www.cnblogs.com/jiangchenxi/p/8288230.html
Copyright © 2020-2023  润新知