VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#实现顺序栈

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,称为栈底(Bottom)。

  栈相当与生活中洗盘子一样,把洗净的盘子一个接一个地往上放(相当于把元素入栈);取用盘子的时候,则从最上面一个接一个地往下拿(相当于把元素出栈)。

  下面为栈的接口:

  (IDS为各种数据结构的公共接口,包含Count(),IsEmpty(),Clear()三个操作,前面顺序表已经定义过)

using System;
using System.Collections.Generic;
using System.Text;
namespace DateStructrues
{
  /// <summary>
  /// 栈接口
  /// </summary>
  /// <typeparam name="T">泛型</typeparam>
  public interface IStack<T> : IDS<T>
  {
    /// <summary>
    /// 入栈操作
    /// </summary>
    /// <param name="item">泛型:要入栈的元素</param>
    void Push(T item);
    /// <summary>
    /// 出栈操作
    /// </summary>
    /// <returns>出栈的元素</returns>
    T Pop();
    /// <summary>
    /// 取栈顶元素
    /// </summary>
    /// <returns>取出的元素</returns>
    T GetTop();
  }
}

  下面为栈的逻辑实现:

using System;
using System.Collections.Generic;
using System.Text;
namespace DateStructrues
{
  /// <summary>
  /// 顺序栈
  /// </summary>
  /// <typeparam name="T">泛型</typeparam>
  class SeqStack<T> : IStack<T>
  {
    #region
    //
    //数组,存入数据
    //
    private T[] data;
    //
    //最大值
    //
    private int maxsize;
    //
    //栈顶
    //
    private int top;
    /// <summary>
    /// <value>
    /// 获取或设置数组元素
    /// </value>
    /// </summary>
    public T[] Data
    {
      get
      {
        return data;
      }
    }
    /// <summary>
    /// <value>
    /// 获取或设置最大值
    /// </value>
    /// </summary>
    public int Maxsize
    {
      get
      {
        return maxsize;
      }
      set
      {
        maxsize = value;
      }
    }
    /// <summary>
    /// <value>
    /// 获取或设置栈顶元素
    /// </value>
    /// </summary>
    public int Top
    {
      get
      {
        return top;
      }
      set
      {
        top = value;
      }
    }
    /// <summary>
    /// 无参构造器
    /// </summary>
    public SeqStack() : this(10) { }
    /// <summary>
    /// 构造器
    /// </summary>
    /// <param name="size">初始大小</param>
    public SeqStack(int size)
    {
      data = new T[size];
      maxsize = size;
      top = -1;
    }
    #endregion
    #region Method
    /// <summary>
    /// 判断栈是否为满
    /// </summary>
    public bool IsFull
    {
      get
      {
        return top == maxsize - 1;
      }
    }
    #endregion
    #region IStack<T> 成员
    /// <summary>
    /// 出栈操作
    /// 如果data已满,top = maxsize - 1
    /// data[++top] = item
    /// </summary>
    /// <returns>出栈的元素值</returns>
    public T Pop()
    {
      T tmp = default(T);
      //判断表是否为空
      if (top == -1)
      {
        Console.WriteLine("栈为空");
        return tmp;
      }
      tmp = data[top--];
      return tmp;
    }
    /// <summary>
    /// 入栈操作
    /// </summary>
    /// <param name="item">将入栈的值</param>
    public void Push(T item)
    {
      if (top == maxsize - 1)
      {
        Console.WriteLine("栈为满");
        return;
      }
      data[++top] = item;
    }
    /// <summary>
    /// 获取栈顶元素
    /// </summary>
    /// <returns>栈顶元素值</returns>
    public T GetTop()
    {
      if (top == -1)
      {
        Console.WriteLine("栈为空!");
        return default(T);
      }
      return data[top];
    }
    #endregion
    #region IDS<T> 成员
    /// <summary>
    /// 获取栈的长度
    /// </summary>
    public int Count
    {
      get
      {
        return top + 1;
      }
    }
    /// <summary>
    /// 清空操作
    /// </summary>
    public void Clear()
    {
      top = -1;
    }
    /// <summary>
    /// <value>
    /// 判断栈是否为空
    /// 如果为top为-1,返回true
    /// 否则,返回false
    /// </value>
    /// </summary>
    public bool IsEmpty
    {
      get
      {
        return top == -1;
      }
    }
    #endregion
  }
}



相关教程