国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2023-05-16 12:36:01
字體:
來源:轉載
供稿:網友

棧(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#中實現順序棧的程序源代碼

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪湖市| 孝感市| 华宁县| 长宁区| 托克托县| 三门县| 德庆县| 大连市| 哈密市| 黄陵县| 土默特右旗| 收藏| 阳山县| 米脂县| 乐亭县| 突泉县| 沛县| 宽城| 中西区| 沭阳县| 土默特右旗| 客服| 枝江市| 科尔| 桐庐县| 广饶县| 同德县| 德清县| 新密市| 油尖旺区| 荣成市| 界首市| 凉城县| 常山县| 天津市| 新郑市| 商洛市| 海晏县| 珲春市| 紫阳县| 长白|