栈C#与JavaScriptWord文档下载推荐.docx
- 文档编号:17055030
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:24
- 大小:35.70KB
栈C#与JavaScriptWord文档下载推荐.docx
《栈C#与JavaScriptWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《栈C#与JavaScriptWord文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
Stack<
string>
S=newStack<
();
注意这个写法:
Stack是栈的类型,<
>
中是要求保存的数据类型,我们这里是字符串,则其中就是String。
回顾一下我们在链表中的介绍,实际我们也写过这样的链表类:
泛型的链表类。
差别就是在这里,Stack是微软给C#中提供的,实际在VB.NET等语言中都可以引用。
进出栈语句很简单,和我们在C中的没什么差别,就是:
S.Push(st1);
S.Push(st2);
S.Push(st3);
S.Push(st4);
S.Push(st5);
listBox1.Items.Clear();
while(S.Count!
=0)
listBox1.Items.Add(S.Pop());
上述程序见C#下的S0工程。
注意使用习惯上的差异:
在C语言中是按函数的方法引用的,而这里,变量S、这个包含有数据、程序的对象中,直接就有Push()、Pop()方法,实际在使用中不难发现:
C#给S提供了太多的方法和属性。
使用这样的方法,我们大致可以了解Stack类的使用方法,对常见的int、double这样的类型进出栈都是一样的。
以下,我们打开项目->
添加类,增加一个Elem.cs的类文件,然后写进以下类程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
classRound
{
publicdoubleR;
publicRound()
R=0;
}
publicRound(doubler)
R=r;
publicdoubleArea()
returnMath.PI*R*R;
publicdoubleArea(doubler)
returnMath.PI*r*r;
publicdoubleCircle()
return2*Math.PI*R;
publicdoubleCircle(doubler)
return2*Math.PI*r;
一个测试类:
圆面积和周长计算,程序见S0工程Elem.cs
注意这个类:
它有两个构造函数Round(),见第4行和第8行,一个没参数、一个有参数,在类中这样名称相同、参数不同的函数、称为重载,这样可以大大方便类的使用。
同样的手段在第12、16行、以及20、24行上再次出现。
继续给这个类下面补充代码,这是一个计算盒子体积的类,也很简单,就是:
classBOX
publicdoublea,b,c;
publicBOX()
a=b=c=0;
publicBOX(doubleA,doubleB,doubleC)
a=A;
b=B;
c=C;
publicdoubleVolume()
returna*b*c;
BOX体积计算,程序见S0工程Elem.cs
这里需要说明的是:
Round、BOX这两个类,都不是C#固有的类,而是我们自己编写的类,使用它们构造的对象,都会包含着各自的属性数据、以及其中的程序代码,比如计算面积的函数、计算BOX体积的函数。
回到界面设计,鼠标双点圆对象测试按钮,说明一些圆对象:
privatevoidbutton1_Click(objectsender,EventArgse)
{
RoundRA=newRound
(1);
RoundRB=newRound
(2);
RoundRC=newRound(3);
RoundRD=newRound(4);
RoundRE=newRound(5);
}
说明Round类型的对象,程序见S0工程Form1.cs
这5个对象RA、RB、RC、RD、RE分别装有半径1、2、3、4、5的数据,当然,还包含着计算面积周长的数据。
要把这样的对象装进栈里,说明栈对象就是:
Stack<
Round>
注意和前面的差别,此处是为Round类型的对象申请栈。
补充程序就是:
S.Push(RA);
S.Push(RB);
S.Push(RC);
S.Push(RD);
S.Push(RE);
为Round类型的对象申请栈对象S并进栈,程序见S0工程Form1.cs
下面我们逐个出栈,出栈就是:
S.Pop()
语句,但我们要知道出栈的数据也是Round类型的,所以其后面肯定有面积方法,所以可以补充语句为:
S.Pop().Area()
当然,这个数据的类型是double类型,要转换成字符串才能给listBox1控件,于是用C#的转换方法:
S.Pop().Area().ToString();
这些语句看起来很长,但只要自己概念清楚、键盘上按”.”键、会自动弹出提示的。
于是整个函数就是:
privatevoidbutton1_Click(objectsender,EventArgse)
listBox1.Items.Add(S.Pop().Area().ToString());
将5个Round类型的对象进栈并逐个出栈,程序见S0工程Form1.cs
同理,可以将BOX类的对象逐个进栈再逐个出栈,这个程序请自己阅读S0工程的Form1.cs文件。
有了Stack这样的对象,C#下开发程序的效率是非常高的,至今,或许作为操作系统WINDOWS有许多不如人意的地方,但这个系统下强大的开发平台,依然是保障WINDOWS生命力得到不断延续的最坚固基石之一。
至少在今天,许多非常强大的操作系统上还见不到如此优秀的开发平台。
例2四则运算后缀算式的计算。
这个范例在C语言中出现过,C语言下不是图形界面,有个很难看的结果显示,在C#下则要好办的多。
首先在C#下建立一个WINDOWS工程,设计以下界面:
图2后缀表达式计算界面
控件使用了textBox1、button1、button2三个控件,其中在textBox1中输入后缀表达式,按下button1(计算)按钮则显示结果。
鼠标双击Form1,则进入Form1_Load()编程界面,输入:
textBox1.Text="
34*5+67*+"
这样的语句说明:
该程序一旦运行则在textBox1控件中显示:
34*5+67*+,我们在这里把这个算式当作默认的算式。
在C#中编程,界面设计完后,最主要的工作就是:
项目->
添加类,我们要把那些相同概念的数据、程序全部包含到一个类里、然后按这个类的格式申请内存变量,也就是构造对象。
添加一个名称为:
calculation.cs的类型文件,显示如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Text.RegularExpressions;
namespaceS1
classcalculation
说明calculation类,程序见S1工程calculation.cs
(1)字符串中数字字符的判断
注意在上述程序中,一定补充第5行的代码,我们要用这个对象判断一个字符到底是数字、还是运算符。
在C#中,判断一个数字字符的方法来自正则表达式,有关正则表达式的介绍很多,请自己查找相关的资料,我们这里仅仅使用最简单的方法。
首先说明一个正则表达式的对象:
RegexR=newRegex("
[0-9]"
);
R对象将匹配字符0、一直到9,R对象将按这个原则去匹配另外一个对象,如字符串变量ch=”5”,就是说ch中是字符串5,于是下列语句的结果就是真:
R.Match(ch).Success结果为真
如ch=”A”,则语句:
R.Match(ch).Success结果为假
(2)字符串中取得一个字符的方法
另外一个需要注意的是:
C#中取字符串F中第n个字符的方法是:
ch=F.SubString(n,1);
后面的1代表取1个字符。
首先是获得一个后缀表达式,我们这里用构造函数的方法来获得,就是:
classcalculation
stringF,ch;
intn,num1,num2,num;
publiccalculation()
F="
"
ch="
publiccalculation(stringFormula)
F=Formula;
类中的变量名称我们依然使用S2.C中的习惯,Formula将是后缀表达式的字符串。
回顾我们在S2.C中编写的程序,其中有个函数Comput(inaa,intb,charo),
这个函数是根据字符o中的运算符来计算a,b,我们需要补充到这个类里,值得注意的是:
这个函数我们仅仅需要在内部计算即可,而不能让对象中直接调用,这种情况下这个函数的前面就应该加上private的修饰。
于是再次补充这个类就是:
29
30
31
32
33
34
privateintComput(inta,intb,stringo)
intc=0;
switch(o)
case"
+"
:
c=a+b;
break;
-"
c=a-b;
*"
c=a*b;
/"
c=a/b;
default:
c=0;
returnc;
补充calculation类之一:
加入一个私有的方法,程序见S1工程calculation.cs
注意这个函数中的语句,和C语言基本一致,但更加严格,比如c一开始就必须是给出0这样确定的值,default语句后也必须有break,相应的在case后的常数部分,C语言的case‘+’,由于此时o是字符串,则在这里必须写成case“+”
这些都是语言的细节所决定的,实际编程思路没有任何差异。
这个方法从第21行开始。
最后,就是补充根据后缀表达式计算的过程,这个过程就是说遇到数字先进栈、遇到运算符则数字出栈计算、计算结果再进栈,于是补充这个方法就是:
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
publicintResult()
RegexR=newRegex("
int>
s=newStack<
n=0;
while(n<
F.Length)
ch=F.Substring(n,1);
if(R.Match(ch).Success)
s.Push(int.Parse(ch));
else
num1=s.Pop();
num2=s.Pop();
num=Comput(num1,num2,ch);
s.Push(num);
n++;
returns.Pop();
补充calculation类之二:
加入一个计算方法,程序见S1工程calculation.cs
注意这个方法中第35行,在这个问题中,遇到数字要进栈,所以我们为一个整数构造了栈对象s,所以说明方法是:
这样栈可以把遇到的整数保存在栈里。
而把字符转换成整数,一般用:
Int.Parse(ch);
这样的语句即可。
(4)界面类测试程序设计
到界面设计,鼠标双击计算按钮,进入编程界面,写入:
calculationC=newcalculation(textBox1.Text);
MessageBox.Show("
该算式计算结果是"
+C.Result().ToString(),"
计算结果"
MessageBoxButtons.OK);
测试后缀表达式计算的类,程序见S1工程Form1.cs
这个程序里,语句:
说明创建一个对象C、其中包含类calculation中全部数据和函数,它运算所需要的后缀表达式来自textBox1.Text,也就是文本框中输入的字符。
语句:
是用消息框的形式、把计算结果报告出来,注意我们的计算结果是整数,要转换成字符串才可以,也就是:
+C.Result().ToString()
在这个方法的第2项:
则把这个串显示在这个消息框的标题中;
MessageBoxButtons.OK则是说这个消息框有一个OK的按钮,如下图。
图3运行结果消息框
这些都是C#语言的定义,实际对一个熟悉C、正在学习VB6的人而言,C#的学习难度不是很大。
通过上述介绍不难发现:
使用C#完成栈的应用非常简单,而且有图形界面,运行结果可以很好地显示出来,这个是C语言不容易完成的事情,所以仅就WINDOWS开发而言,显然C#有这个极其强大的功能。
作业
1C#完成将中缀表达式转换成后缀表达式的程序;
2C#中完成将中缀表达式直接计算出结果的程序。
3尝试编程能计算浮点数的四则运算。
二、JavaScript的栈以及应用
JavaScript的栈是数组对象中自动提供的,这点如同C#,实际也不需要自己编写什么栈的程序,如果你用:
vars=newArray();
定义一个s的数组,则这个s上将有以下的方法可供使用:
FF:
Firefox,IE:
InternetExplorer
方法
描述
FF
IE
concat()
连接两个或更多的数组,并返回结果。
join()
把数组的所有元素放入一个字符串。
元素通过指定的分隔符进行分隔。
pop()
删除并返回数组的最后一个元素
5.5
push()
向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()
颠倒数组中元素的顺序。
shift()
删除并返回数组的第一个元素
slice()
从某个已有的数组返回选定的元素
sort()
对数组的元素进行排序
splice()
删除元素,并向数组添加新元素。
toSource()
返回该对象的源代码。
-
toString()
把数组转换为字符串,并返回结果。
toLocaleString()
把数组转换为本地数组,并返回结果。
unshift()
向数组的开头添加一个或更多元素,并返回新的长度。
valueOf()
返回数组对象的原始值
而这个对象提供的属性,则如下表:
属性
constructor
返回对创建此对象的数组函数的引用。
index
input
length
设置或返回数组中元素的数目。
prototype
使您有能力向对象添加属性和方法。
由于JavaScript本身并没有什么具体类型,s将能保存任何对象,所以说JavaScript也是一个功能非常强大的语言。
所以使用现有的栈是非常好的习惯,在这里先将几个字符串做进出栈的测试,就是:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# JavaScript