首 页IT知识库翔宇问吧收藏本站
当前位置:算搜IT乐园IT知识库C#专区算法设计

使用C#实现顺序栈的算法

减小字体增大字体作者:suansuo.cn  来源:本站原创  发布时间:2018-07-01 19:27:51

栈(Stack)是限定在表尾端进行插入或删除操作的线性表。因此,表尾具有特殊的含义,称之为栈顶(Top),另一端是固定的,称为栈底(Bottom)。不含任何数据元素的栈为空栈(Empty Stack)。

栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第1个字母。栈中元素按a1,a2,a3,...,an的次序进栈,出栈的次序为栈顶元素。即出栈的次序与进栈相反,an第一个出栈,a1最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先进后出(First In Last Out,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。

对于栈来说,主要的操作有:

1、构造空栈

2、清空栈:ClearStack()

3、求栈长(获得栈中元素的个数):StackLength()

4、返回栈顶元素:GetTop()

5、压栈操作:Push(object e)

6、弹栈操作(出栈操作):Pop()

7、判断栈是否为空:IsEmpty()

8、判断栈是否已满:IsFull()

using System;

class Stack
{
    int maxsize; //顺序栈的容量
    object[] data; //数组,用于存储栈中的数据
    int top; //指示栈顶

    public object this[int index]
    {
        get{return data[index];}
        set{ data[index] = value;}
    }

    //栈容量属性
    public int Maxsize
    {
        get{return maxsize;}
        set{maxsize = value;}
    }

    //获得栈顶的属性
    public int Top
    {
        get{return top;}
    }

    //使用构造器初始化栈
    public Stack(int size)
    {
        data = new object[size];
        maxsize = size;
        top = -1;
    }

    //求栈的长度(栈中的元素个数)
    public int StackLength()
    {
        return top+1;
    }

    //清空顺序栈
    public void ClearStack()
    {
        top = -1;
    }

    //判断顺序栈是否为空
    public bool IsEmpty()
    {
          if (top == -1)
          {
                return true;
          }
          else
          {
               return false;
          }
    }

    //判断顺序栈是否为满
    public bool IsFull()
    {
        if (top == maxsize-1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    //入栈操作
    public void Push(object e)
    {
        if(IsFull())
        {
            Console.WriteLine("栈已满!");
            return;
        }
        data[++top] = e;
    }

    //出栈操作,并返回出栈的元素
    public object Pop()
    {
        object temp = null;
        if (IsEmpty())
        {
            Console.WriteLine("栈为空!");
            return temp;
        }
        temp = data[top];
        top --;
        return temp;
    }

    //获取栈顶数据元素
    public object GetTop()
    {
        if (IsEmpty())
        {
            Console.WriteLine("栈为空!");
            return null;
        }
        return data[top];
    }
}

//定义测试类
class Test
{
    static void Main()
    {
        Stack s = new Stack(10);
        Random r = new Random(); //随机生成数据
        int mid;

        for(int i = 0;i<10;i++)
        {
            mid = (int)r.Next(10,100); //获取10~100之间的整型数据
            s.Push(mid); //将数据压栈
            Console.WriteLine("将数据{0}压栈,现在栈中元素数为:{1}",
            mid,s.StackLength());
        }

        Console.WriteLine("\n准备将数据元素888压栈:");
        s.Push(888);
        Console.WriteLine("栈中元素个数为:{0}",s.StackLength());
        Console.WriteLine();
        for(int j = 0;j<10;j++) //循环出栈
        {
            Console.WriteLine("将数据{0}弹栈,现在栈中元素数为:{1}",
                                                s.Pop(),s.StackLength());
        }
    }
}

运行结果如下:

C#中实现顺序栈的程序源代码

本文最初发布在网易博客,现转载到这里:原文地址http://blog.163.com/fujl_2008/blog/static/10378107200810972618942/

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

用户名:查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 1分

内 容:

            请注意用语文明且合法,不要发布带有攻击性、侮辱性的言论,谢谢合作!

        通知管理员 验证码:

关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图 | 用户守则 | 联系我们
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2019 suansuo.cn. All Rights Reserved.
网站备案号:黑ICP备13005378号-3
华宝证券科创板知识问卷答案,如何开通低佣金股票证券账户?_侧根股票网资本市场主要包括哪些市场,投行部与资本市场部哪个部门更好?_侧给股票网速动比率的计算方法充分考虑了,小白头一回参加券商研究所面试,我该从哪些方面准备?PS:面试时候要求带上写的小型行研报告。_侧谮股票网双龙战法指标下载,一个投资的故事告诉你:死啃七句口诀,穷人都能变富翁!_策髦股票网股票上涨的k线图有几种,怎样看股票k线图?同花顺怎么看k线,K线就在那怎么看懂看明看清K线的语言?股票怎么看k线图预测明天涨跌图,每天去看K线是不是特别费时间?近期强势股指标源码,炒股主要依靠源代码指标可以吗?强势股低吸比龙头战法更暴利,散户如何利用低位筹码峰捕捉涨停大牛股?跌破趋势线洗盘,只因死啃一根线,“击穿趋势线卖,上穿趋势线买”规避高位滑坡风险强势股低吸的重要指标,盘面上有积极信号,两个方向仍然是低吸的机会!大盘k线图,如何才能看出大盘和股票是放量缩量?科创板可转债转股是什么意思,发行规模80亿的可转债就要上市交易了,价格会怎么样呢?怎么卖呢国金证券科创板答案,科创板注册制蓬勃发展,a股市场分化,券商App升级为智慧投资“神器”中信建投科创板正规答题答案,中信建投证券:下半年A股不存在系统性机会,成长消费占优中小板上市公司条件,深交所主板和中小板合并! 不会加速市场扩容, 投资者门槛不变, 来看十问十答, 核心要点一图看懂科创板测评正确答案,如何看待科创板基金?怎么看股票筹码峰指标,怎么样能看出一支股票到顶了?双筹码峰是怎么回事,一旦筹码集中度达到12%,意味着主力已经完成开仓,满仓在等待股价上涨爆发股票下跌筹码峰下移,2021年有什么股票可以让我持有一年?分时筹码峰指标公式,股票技术指标类型之累积分配线ADL筹码计算公式及详解,图文详解成交量选股铁律,堪称经典,选股其实可以很简单如何看筹码峰,一位老股民直言:牢记这6个筹码峰变化图,再也不用担心被庄家骗如何用筹码峰选股公式,筹码分布实战选股因子曝光,老股民22年炒股精髓分享于世,收藏筹码峰集体变短怎么回事,买股票看筹码有用吗?多峰筹码代表什么,干货:筹码分布运用详解大全,这是我见过分析得最透彻的文章!全集如何通过筹码峰看主力,分时筹码峰指标——看涨还是看跌,震荡还是洗盘?三线来定乾坤医药行业市盈率,从1000亿元开始,医药行业十大领军人物,关爱老人,获得永生!如何理解市盈率估值,公司市盈率该怎么算?市盈率为什么是负数的股会涨吗,主力连续净买入的股票一定会涨吗?