<strike id="rrvnz"></strike>

    <noframes id="rrvnz">
    <noframes id="rrvnz"><span id="rrvnz"><pre id="rrvnz"></pre></span><address id="rrvnz"></address>
    <address id="rrvnz"><nobr id="rrvnz"></nobr></address><noframes id="rrvnz">
      <em id="rrvnz"></em>

        首 頁IT知識庫翔宇問吧收藏本站
        當前位置:翔宇亭IT樂園IT知識庫C#專區算法設計

        使用C#實現順序棧的算法

        減小字體 增大字體 作者:biye5u.com  來源:本站原創  發布時間: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 biye5u.com. All Rights Reserved.
        網站備案號:黑ICP備13005378號-3
        特黄特色三级在线观看 - 视频 - 在线观看 - 影视资讯 -心晴网