程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#面向對象編程進階(一) ——實現棧

C#面向對象編程進階(一) ——實現棧

編輯:C#入門知識

C#面向對象編程進階(一) ——實現棧


如何用C#編寫一個棧類?          關鍵在於這樣的一個類應該如何設計呢?首先要確立面向對象的編程思想,即類是對實體進行合理地抽象和建模,而這種思想將貫徹在我們編程的整個過程中。下面我們一步一步來做。   1.類方法簽名初步設計     對於設計一個類而言我們應該由外而內的進行設計,首先考慮它對外部提供的接口,再去考慮其內部的安排。對於棧而言,最重要的外部特性就是壓棧和彈棧,所以要設計兩個方法Push和pop,對於壓棧而言,壓進去的元素存放在哪,所以就要用數組來開辟一段連續的存儲空間來對棧進行順序存儲。所以初步設計如下:         public class Stack     {         private int[] array = new int[3];           public void Push(int element)         {         }           public int Pop()         {             return 0;         }     }           具體的方法應該如何實現呢?我們知道壓棧和彈棧都是在棧頂進行的,如何表示棧頂呢?我們可以設置一個計數器cout對每次壓棧操作進行計數,同樣對於彈棧操作也進行計數,使得計數器總是表示棧內元素的個數。所以在之前的代碼中添加相關語句,現在代碼如下:         public class Stack     {         private int[] array = new int[3];         private int count;           public void Push(int element)         {             count++;         }           public int Pop()         {             count--;             return 0;         }     }         接著我們來分別實現兩個方法的功能。             public void Push(int element)         {             this.array[this.count] = element;             count++;         }           public int Pop()         {             int ele = this.array[this.count - 1];             count--;             return ele;         }       至此兩個方法的功能已經基本實現。   2.設計衍化 -- 考慮到邊界情況,使用異常機制     現在要考慮一個問題,即棧的存儲空間是用數組來固定分配的,那麼壓棧就可能出現棧滿後溢出的情況。為了應對這種異常情況我們需要采取相應的措施。類似的棧也會出現棧空的情況下彈棧的情況。我們先來處理後者:           public int Pop()         {             if (this.count == 0)             {                 throw new Exception("堆棧已經為空!");             }               int ele = this.array[this.count - 1];             --this.count;             return ele;         }       然後我們在測試方法中添加try-catch語句便能夠對拋出的異常進行處理。       而對於push方法,我們希望在棧滿的情況下追加存儲空間應該如何做呢?       我們再定義一個數組,開辟出兩倍於原數組的連續存儲空間,然後將原數組中的元素拷貝給新數組,再將新數組的引用賦值給原數組以便於外部使用。             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++;             }       這樣一來,這個類就已經基本設計好了。   3.功能測試     在main方法中添加如下測試代碼:           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("執行發生錯誤!" + exception.Message);             }             Console.Read();         }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved