zoukankan      html  css  js  c++  java
  • Stack 栈 ----Queue 队列

     一、概念

    栈 Stack 先进后出的结构,队列 Queue 先进先出的结构 如图:

    二 、 实现

      实现如上两个数据结构。 首先动手之前,Framework Design Guidelines这本书告述我们,在设计API或者实现类的时候,应当围绕场景编写API规格说明书

     1.1 实现栈

         对于栈提供

    Stack<T>         :    创建一个 栈

     void Push(T s)  :   插入一个元素

     T Pop ()           :   推出最上的元素,删除并且返回这个元素

     T PopFirst()     :    返回最上面的元素,不删除

     void Clear()     :    清空栈元素

     int  Count        :    返回栈元素个数

     bool IsEmpty() :     是否为空

    使用链表实现:

     在实现的时候,最关键的是思路,因为一开始由于思路问题出现了一个小错误 ,这里提醒一下自己,也是举一反三实现其他API 也是先理清思路然后逐步实现。

    创建一个泛型类:

    public class Stack<T>
    {
       class Node
       {
          public T Item{get;set;}
          public Node NextNode{get;set;}
        }

    其中使用 一个内部类 Node 用来实现链表 ,它包含两个元素,一个是这个节点的值 Item ,一个是链表指向下一个节点的引用。 这里将两个元素设置为属性。

       private Node first=null;
       private int numbers;
    
       public void Stack<T>()
       {
           numbers = 0;
       }

    定义两个字段 ,一个节点实例,用来存储栈最近放入的元素。 一个int类型用来记录栈元素个数。

    /// <summary>
        /// 推入一个元素
        /// </summary>
        /// <param name="s"></param>
       public void Push(T s)
       {
           Node oldFirst = first;
           first = new Node();
           first.Item = s;
           first.NextNode = oldFirst;
           numbers++;
       }

    这里实现放入元素,先把当前的节点存储起来,以免引用丢失,把推入的元素设置为栈顶元素first。 要注意的一点是红色部分需要新分配一个内存,让first指向他。 这样每次推入一个元素就有个新的内存存储它,建立起了链表。

     /// <summary>
        /// 退出当前第一个元素并删除返回
        /// </summary>
        /// <returns></returns>
       public T Pop()
       {
           T value = first.Item; 
    first=first.NextNode; //第二个节点代替第一个节点,原先第一个节点丢弃
    numbers--; return value; }

    首先要将当前栈顶的元素值存储用以返回,还要保存顶元素保存的指向下个指针的节点用来设置成新的顶元素。核心部分就是这么多。

    使用数组实现:

    用数组来存储元素值

  • 相关阅读:
    html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
    HTMl5的存储方式sessionStorage和localStorage详解
    浏览器文档模式设置
    页面缓存
    SQL Server死锁总结
    读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案
    页面缓存
    HTML5 history API,创造更好的浏览体验
    【转】编写高质量代码改善C#程序的157个建议——建议96:成员应优先考虑公开基类型或接口
    【转】编写高质量代码改善C#程序的157个建议——建议95:避免在构造方法中调用虚成员
  • 原文地址:https://www.cnblogs.com/bambomtan/p/5118786.html
Copyright © 2011-2022 走看看