• C#实现的堆栈


    以前虽说也看过相关的数据结构方面的书籍,但是确实都是理解不深,今天翻看C#语言规范4.0,看到一个示例就是用C#实现的堆栈,代码如下

       1:  using System;
       2:  namespace Jax.Collections
       3:  {
       4:      public class Stack
       5:      {
       6:          Entry top;
       7:          public void Push(object data)
       8:          {
       9:              top=new Entry(top,data);
      10:          }
      11:          public object Pop()
      12:          {
      13:              if(top== null)
      14:              {
      15:                  throw new InvalidOperationException();
      16:              }
      17:              object result = top.data;
      18:              top = top.next;
      19:              return result;
      20:          }
      21:          class Entry
      22:          {
      23:              public Entry next;
      24:              public object data;
      25:              public Entry(Entry next,object data)
      26:              {
      27:                  this.next = next;
      28:                  this.data = data;
      29:              }
      30:          }
      31:      }
      32:  }

    测试代码:

       1:  using System;
       2:  using Jax.Collections;
       3:  class Test
       4:  {
       5:      static void Main()
       6:      {
       7:          Stack s = new Stack();
       8:          s.Push(100);
       9:          s.Push("Jax");
      10:          s.Push(200);
      11:          Console.WriteLine(s.Pop());
      12:          Console.WriteLine(s.Pop());
      13:          Console.WriteLine(s.Pop());
      14:          Console.ReadLine();
      15:      }
      16:  }

    运行结果:

    MSNLitePic 2012-02-14 11_31_33

    最开始光看代码怎么也没搞懂数据是如何存储的,通过跟踪才明白

    第一步进行第一次Push操作,此时top为null,data值为100

    image

    通过Entry的构造函数进行赋值,之后我们可以看到top的值变成了这样

    image

    第二次push之后,top变成了这样:

    image

    通过上图可以看到,top的next变成了第一次push时top的值。

    这是第三次push的结果,可以看到,每次都是把上一个的值作存储到next中

    image

    而pop则正好相反,这是pop之前的值:

    image

    通过top=top.next操作进行第一次pop之后:

    image

    image

    最后一次push的值已经从堆栈中移除了。

    通过这么简单的一个小例子,对数据结构的链表有了更加直观清晰的认识。

    这就是数据结构中链表,push对应的添加节点,pop对应的是移除节点!

    http://www.kissit.com.cn/
  • 相关阅读:
    数据库与数据仓库的比较Hbase——Hive
    log4j 配置使用
    hadoop Datanode Uuid unassigned
    kafka相关文章引用
    kafka可靠性
    kafka基本原理
    html
    并发编程
    Python之系统交互(subprocess)
    网络编程
  • 原文地址:https://www.cnblogs.com/Junelee1211/p/2350789.html
Copyright © 2020-2023  润新知