博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现的堆栈
阅读量:5245 次
发布时间:2019-06-14

本文共 1718 字,大约阅读时间需要 5 分钟。

以前虽说也看过相关的数据结构方面的书籍,但是确实都是理解不深,今天翻看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:  }

运行结果:

 

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

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

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

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/Junelee1211/archive/2012/02/14/2350789.html

你可能感兴趣的文章
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>