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; }

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

    使用数组实现:

    用数组来存储元素值

  • 相关阅读:
    deepin/uos和局域网其他机器无法ping通
    Ubuntu18.04完全卸载vscode
    批量拉取github组织或者用户的仓库
    vmware uos挂载windows共享目录
    清空容器另类方式
    time_t 时间格式化字符串
    条件变量condition_variable
    C++多维堆数组定义
    arm64 ubuntu18.04 bionic安装bcc tools
    win10下载编译chromium
  • 原文地址:https://www.cnblogs.com/bambomtan/p/5118786.html
Copyright © 2011-2022 走看看