C#数据结构-栈

栈是一种特殊的线性结构,是一种运算受限的数据结构,栈的特点就是是 先进后出,跟我们的乒乓球筒,羽毛球筒一样,先放进去的在 栈底,后放进去的称之为 顶点或者栈顶
这里,我们用两种方式表达栈的运用,顺序表和链表。

顺序栈
这里标记顶点,因为栈的这种先进后出的特殊结构,入栈和出栈都是从顶点操作的。
/// <summary>
    /// 顺序栈
    /// </summary>
    class LinkStack
    {
        const int Maxsize = 100;
        public string[] data;
        public int top;
        public LinkStack()
        {
            data = new string[Maxsize];
            top = -1;
        }

        #region 判断是否为空栈 O(1)
        public bool StackEmpty()
        {
            return (top == -1);
        }
        #endregion
        #region 进栈 O(1)
        public bool Push(string values)
        {
            //满栈无法进栈
            if (top >= Maxsize-1)
            {
                return false;
            }

            top++;
            data[top] = values;
            return true;
        }
        #endregion
        #region 出栈 O(1)
        public bool Pop(ref string values)
        {
            //判断是否为空栈
            if (StackEmpty())
            {
                return false;
            }
            values = data[top];
            top--;
            return true;
        }
        #endregion
        #region 获取顶点值 O(1)
        public bool GetTop(ref string values)
        {
            if (StackEmpty())
            {
                return false;
            }
            values = data[top];
            return true;
        }
        #endregion
    }

链式栈:
这里也是一样,保存头部,每次出栈入站都是操作头部。
/// <summary>
    /// 链式栈存储结构
    /// </summary>
    class LinkListStack
    {
        public string data;
        public LinkListStack next;
    }
    /// <summary>
    /// 链式栈的操作
    /// </summary>
    class LinkStackClass
    {
        LinkListStack head = new LinkListStack();
        public LinkStackClass()
        {
            head.next = null;
        }

        #region 判断链式栈是否为空 O(1)
        public bool StackEmpty()
        {
            return (head.next == null);
        }
        #endregion
        #region 入栈 O(1)
        public void Push(string values)
        {
            LinkListStack stacks = new LinkListStack();
            //头部进栈
            stacks.data = values;
            stacks.next = head.next;
            head.next = stacks;
        }
        #endregion
        #region 出栈 O(1)
        public bool Pop(ref string values)
        {
            LinkListStack stack;
            //判断栈是否为空
            if (head.next==null)//StackEmpty()
            {
                return false;
            }
            //出栈从头部出栈
            stack = head.next;
            values = stack.data;
            head.next = stack.next;
            stack = null;
            return true;
        }
        #endregion
        #region 取栈的顶点 O(1)
        public bool GetTop(ref string values)
        {
            LinkListStack stack;
            //判断栈是否为空
            if (head.next == null)//StackEmpty()
            {
                return false;
            }
            stack = head.next;
            values = stack.data;
            return true;
        }
        #endregion
    }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值