___19__C#手动编写Stack类,模拟栈的数据操作

Note节点类

// 节点类
  class Node
  {
    // 节点有两个属性:自己、指向下一个节点
    public Node Next;
    public object Value;

    public Node(object value) : this(value, null) {}
    //创建对象的时候先调用Node(object value,Node next) ,则 Node next 这里为空
    public Node(object value, Node next)
    {
      Next = next;
      Value = value;
    }
  }




Stack类


 public class Stack
  {
    // first: 栈最上面一个节点
    private Node first = null;
    
    // count: 栈中节点的数量
    private int count = 0;

    // 判空属性,提供get访问器
    public bool Empty
    {
      get
      {
        return (first == null);
      }
    }

    // 计数属性,提供get访问器
    public int Count
    {
       get
       {
          return count;
       }
     }

  // 压栈操作,注意返回object
  public object Pop()
  {
    if (first == null)
    {
      throw new InvalidOperationException ("Cant pop from an empty stack");
    }
    else
    {
      object temp = first.Value;
      first = first.Next;
      count--;
      return temp;
    }
  }

  // 弹栈操作,返回空
  public void Push(object o)
  {
    first = new Node(o, first);
    count++;
  }

}



主程序 



static void Main()
{
    Stack s = new Stack();

    if (s.Empty)
      Console.WriteLine("堆栈为空");
    else
      Console.WriteLine("堆栈非空");

    // 往栈中压入5个节点
    for (int i = 0; i < 5; i++)
      s.Push(i);

    Console.WriteLine("往堆栈中压入了{0}个元素", s.Count);
    
    // 把栈中节点全部弹出来
    for (int i = 0; i < 5; i++)
      Console.WriteLine("弹出了第{0}个元素,还剩{1}个元素。", (int)s.Pop()+1, s.Count);

    s = null;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值