亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

C#面向?qū)ο缶幊踢M(jìn)階(一) ——實(shí)現(xiàn)棧 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

    如何用C#編寫(xiě)一個(gè)棧類(lèi)?

    關(guān)鍵在于這樣的一個(gè)類(lèi)應(yīng)該如何設(shè)計(jì)呢?首先要確立面向?qū)ο蟮木幊趟枷,即?lèi)是對(duì)實(shí)體進(jìn)行合理地抽象和建模,而這種思想將貫徹在我們編程的整個(gè)過(guò)程中,

C#面向?qū)ο缶幊踢M(jìn)階(一) ——實(shí)現(xiàn)棧

。下面我們一步一步來(lái)做。

    1.類(lèi)方法簽名初步設(shè)計(jì)

    對(duì)于設(shè)計(jì)一個(gè)類(lèi)而言我們應(yīng)該由外而內(nèi)的進(jìn)行設(shè)計(jì),首先考慮它對(duì)外部提供的接口,再去考慮其內(nèi)部的安排。對(duì)于棧而言,最重要的外部特性就是壓棧和彈棧,所以要設(shè)計(jì)兩個(gè)方法Push和pop,對(duì)于壓棧而言,壓進(jìn)去的元素存放在哪,所以就要用數(shù)組來(lái)開(kāi)辟一段連續(xù)的存儲(chǔ)空間來(lái)對(duì)棧進(jìn)行順序存儲(chǔ)。所以初步設(shè)計(jì)如下:

    public class Stack

    {

    private int[] array = new int[3];

    public void Push(int element)

    {

    }

    public int Pop()

    {

    return 0;

    }

    }

    具體的方法應(yīng)該如何實(shí)現(xiàn)呢?我們知道壓棧和彈棧都是在棧頂進(jìn)行的,如何表示棧頂呢?我們可以設(shè)置一個(gè)計(jì)數(shù)器cout對(duì)每次壓棧操作進(jìn)行計(jì)數(shù),同樣對(duì)于彈棧操作也進(jìn)行計(jì)數(shù),使得計(jì)數(shù)器總是表示棧內(nèi)元素的個(gè)數(shù)。所以在之前的代碼中添加相關(guān)語(yǔ)句,現(xiàn)在代碼如下:

    public class Stack

    {

    private int[] array = new int[3];

    private int count;

    public void Push(int element)

    {

    count++;

    }

    public int Pop()

    {

    count--;

    return 0;

    }

    }

    接著我們來(lái)分別實(shí)現(xiàn)兩個(gè)方法的功能。

    public void Push(int element)

    {

    this.array[this.count] = element;

    count++;

    }

    public int Pop()

    {

    int ele = this.array[this.count - 1];

    count--;

    return ele;

    }

    至此兩個(gè)方法的功能已經(jīng)基本實(shí)現(xiàn)。

    2.設(shè)計(jì)衍化 -- 考慮到邊界情況,使用異常機(jī)制

    現(xiàn)在要考慮一個(gè)問(wèn)題,即棧的存儲(chǔ)空間是用數(shù)組來(lái)固定分配的,那么壓棧就可能出現(xiàn)棧滿(mǎn)后溢出的情況。為了應(yīng)對(duì)這種異常情況我們需要采取相應(yīng)的措施。類(lèi)似的棧也會(huì)出現(xiàn)棧空的情況下彈棧的情況。我們先來(lái)處理后者:

    public int Pop()

    {

    if (this.count == 0)

    {

    throw new Exception("堆棧已經(jīng)為空!");

    }

    int ele = this.array[this.count - 1];

    --this.count;

    return ele;

    }

    然后我們?cè)跍y(cè)試方法中添加try-catch語(yǔ)句便能夠?qū)伋龅漠惓_M(jìn)行處理,

電腦資料

C#面向?qū)ο缶幊踢M(jìn)階(一) ——實(shí)現(xiàn)棧》(http://www.ishadingyu.com)。

    而對(duì)于push方法,我們希望在棧滿(mǎn)的情況下追加存儲(chǔ)空間應(yīng)該如何做呢?

    我們?cè)俣x一個(gè)數(shù)組,開(kāi)辟出兩倍于原數(shù)組的連續(xù)存儲(chǔ)空間,然后將原數(shù)組中的元素拷貝給新數(shù)組,再將新數(shù)組的引用賦值給原數(shù)組以便于外部使用。

    public void Push(int element)

    {

    if (this.count == this.array.Length)

    {

    int[] array2 = new int[this.array.Length * 2];

    for (int i = 0; i < this.array.Length; i++)

    {

    array2[i] = array[i];

    }

    this.array = array2;

    }

    this.array[this.count] = element;

    this.count++;

    }

    這樣一來(lái),這個(gè)類(lèi)就已經(jīng)基本設(shè)計(jì)好了。

    3.功能測(cè)試

    在main方法中添加如下測(cè)試代碼:

    static void Main(string[] args)

    {

    try

    {

    Stack stack = new Stack();

    stack.Push(2);

    stack.Push(5);

    stack.Push(8);

    stack.Push(9);

    int ele1 = stack.Pop();

    Console.WriteLine("{0}", ele1);

    int ele2 = stack.Pop();

    Console.WriteLine("{0}", ele2);

    int ele3 = stack.Pop();

    Console.WriteLine("{0}", ele3);

    int ele4 = stack.Pop();

    Console.WriteLine("{0}", ele4);

    }

    catch (Exception exception)

    {

    Console.WriteLine("執(zhí)行發(fā)生錯(cuò)誤!" + exception.Message);

    }

    Console.Read();

    }

最新文章