预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C#面向对象编程进阶(一)——实现栈-电脑资料  如何用C#编写一个栈类?  关键在于这样的一个类应该如何设计呢?首先要确立面向对象的编程思想,即类是对实体进行合理地抽象和建模,而这种思想将贯彻在我们编程的整个过程中,C#面向对象编程进阶(一)——实现栈。下面我们一步一步来做。  1.类方法签名初步设计  对于设计一个类而言我们应该由外而内的进行设计,首先考虑它对外部提供的接口,再去考虑其内部的安排。对于栈而言,最重要的外部特性就是压栈和弹栈,所以要设计两个方法Push和pop,对于压栈而言,压进去的元素存放在哪,所以就要用数组来开辟一段连续的存储空间来对栈进行顺序存储。所以初步设计如下:  publicclassStack  {  privateint[]array=newint[3];  publicvoidPush(intelement)  {  }  publicintPop()  {  return0;  }  }  具体的方法应该如何实现呢?我们知道压栈和弹栈都是在栈顶进行的,如何表示栈顶呢?我们可以设置一个计数器cout对每次压栈操作进行计数,同样对于弹栈操作也进行计数,使得计数器总是表示栈内元素的个数。所以在之前的代码中添加相关语句,现在代码如下:  publicclassStack  {  privateint[]array=newint[3];  privateintcount;  publicvoidPush(intelement)  {  count++;  }  publicintPop()  {  count--;  return0;  }  }  接着我们来分别实现两个方法的功能。  publicvoidPush(intelement)  {  this.array[this.count]=element;  count++;  }  publicintPop()  {  intele=this.array[this.count-1];  count--;  returnele;  }  至此两个方法的功能已经基本实现。  2.设计衍化--考虑到边界情况,使用异常机制  现在要考虑一个问题,即栈的存储空间是用数组来固定分配的,那么压栈就可能出现栈满后溢出的情况。为了应对这种异常情况我们需要采取相应的措施。类似的栈也会出现栈空的情况下弹栈的情况。我们先来处理后者:  publicintPop()  {  if(this.count==0)  {  thrownewException("堆栈已经为空!");  }  intele=this.array[this.count-1];  --this.count;  returnele;  }  然后我们在测试方法中添加try-catch语句便能够对抛出的异常进行处理,电脑资料《C#面向对象编程进阶(一)——实现栈》(https://www.unjs.com)。  而对于push方法,我们希望在栈满的情况下追加存储空间应该如何做呢?  我们再定义一个数组,开辟出两倍于原数组的连续存储空间,然后将原数组中的元素拷贝给新数组,再将新数组的引用赋值给原数组以便于外部使用。  publicvoidPush(intelement)  {  if(this.count==