ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:35.70KB ,
资源ID:4139012      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4139012.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(栈C#与JavaScript.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

栈C#与JavaScript.docx

1、栈C#与JavaScript西北师范大学地环学院地理信息系数据结构实验讲义二 栈 C#与JavaScript语言实现张长城2011-2-8C#的栈对象使用、JavaScript顺序表构造栈一、 C#的栈对象使用对C#而言,要使用栈是极其简单的事情,因为C#已经有栈对象,所以根本不需要自用再用顺序表构造栈,只需要你会说明、会应用即可。在C#中栈对象的类型名称是Stack,这是个泛型的对象,所以,你在使用这个对象的时候,可以不必在意什么类型的数据可以使用。例1 不同对象的的进出栈测试。打开C#建立一个WINDOWS应用工程,设计如下界面:图1 测试界面设计这个界面由4个button对象、一个Lis

2、tBox1对象组成。其中:Button1:圆对象测试;Button2:BOX对象测试;Button3:字符串进栈测试。Button4:结束。首先看字符串进出栈,C#中说明字符串如下: string st1 = AAA; string st2 = BBB; string st3 = CCC; string st4 = DDD; string st5 = EEE;要使用一个栈来处理字符串,则是:Stack S = new Stack();注意这个写法:Stack是栈的类型,中是要求保存的数据类型,我们这里是字符串,则其中就是String。回顾一下我们在链表中的介绍,实际我们也写过这样的链表类:泛型

3、的链表类。差别就是在这里,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()方法,实际在使用中

4、不难发现:C#给S提供了太多的方法和属性。使用这样的方法,我们大致可以了解Stack类的使用方法,对常见的int、double这样的类型进出栈都是一样的。以下,我们打开项目-添加类,增加一个Elem.cs的类文件,然后写进以下类程序:12345678910111213141516171819202122232425262728 class Round public double R; public Round() R = 0; public Round(double r) R = r; public double Area() return Math.PI * R * R; public do

5、uble Area(double r) return Math.PI * r * r; public double Circle() return 2*Math.PI*R; public double Circle(double r) return 2 * Math.PI * r; 一个测试类:圆面积和周长计算,程序见S0工程Elem.cs注意这个类:它有两个构造函数Round(),见第4行和第8行,一个没参数、一个有参数,在类中这样名称相同、参数不同的函数、称为重载,这样可以大大方便类的使用。同样的手段在第12、16行、以及20、24行上再次出现。继续给这个类下面补充代码,这是一个计算盒子体

6、积的类,也很简单,就是:12345678910111213141516 class BOX public double a, b, c; public BOX() a = b = c = 0; public BOX(double A, double B, double C) a = A;b=B ; c=C; public double Volume() return a * b * c; 一个测试类:BOX体积计算,程序见S0工程Elem.cs这里需要说明的是:Round、BOX这两个类,都不是C#固有的类,而是我们自己编写的类,使用它们构造的对象,都会包含着各自的属性数据、以及其中的程序代码

7、,比如计算面积的函数、计算BOX体积的函数。回到界面设计,鼠标双点圆对象测试按钮,说明一些圆对象:1234567private void button1_Click(object sender, EventArgs e) Round RA = new Round(1); Round RB = new Round(2); Round RC = new Round(3); Round RD = new Round(4); Round RE = new Round(5);说明Round类型的对象,程序见S0工程Form1.cs这5个对象RA、RB、RC、RD、RE分别装有半径1、2、3、4、5的数据

8、,当然,还包含着计算面积周长的数据。要把这样的对象装进栈里,说明栈对象就是: Stack S = new Stack();注意和前面的差别,此处是为Round类型的对象申请栈。补充程序就是:1234567891011121314private void button1_Click(object sender, EventArgs e) Round RA = new Round(1); Round RB = new Round(2); Round RC = new Round(3); Round RD = new Round(4); Round RE = new Round(5); Stack

9、S = new Stack(); 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();这些语句看起来很长,但只要自己概念清楚、键盘上按”.”

10、键、会自动弹出提示的。于是整个函数就是:1234567891011121314151617 private void button1_Click(object sender, EventArgs e) Round RA = new Round(1); Round RB = new Round(2); Round RC = new Round(3); Round RD = new Round(4); Round RE = new Round(5); Stack S = new Stack(); S.Push(RA); S.Push(RB); S.Push(RC); S.Push(RD); S.P

11、ush(RE); listBox1.Items.Clear(); while (S.Count != 0) listBox1.Items.Add(S.Pop().Area().ToString(); 将5个Round类型的对象进栈并逐个出栈,程序见S0工程Form1.cs同理,可以将BOX类的对象逐个进栈再逐个出栈,这个程序请自己阅读S0工程的Form1.cs文件。有了Stack这样的对象,C#下开发程序的效率是非常高的,至今,或许作为操作系统WINDOWS有许多不如人意的地方,但这个系统下强大的开发平台,依然是保障WINDOWS生命力得到不断延续的最坚固基石之一。至少在今天,许多非常强大的操

12、作系统上还见不到如此优秀的开发平台。例2 四则运算后缀算式的计算。这个范例在C语言中出现过,C语言下不是图形界面,有个很难看的结果显示,在C#下则要好办的多。首先在C#下建立一个WINDOWS工程,设计以下界面:图2 后缀表达式计算界面控件使用了textBox1、button1、button2三个控件,其中在textBox1中输入后缀表达式,按下button1(计算)按钮则显示结果。鼠标双击Form1,则进入Form1_Load()编程界面,输入:textBox1.Text = 34*5+67*+;这样的语句说明:该程序一旦运行则在textBox1控件中显示:34*5+67*+,我们在这里把这

13、个算式当作默认的算式。在C#中编程,界面设计完后,最主要的工作就是:项目-添加类,我们要把那些相同概念的数据、程序全部包含到一个类里、然后按这个类的格式申请内存变量,也就是构造对象。添加一个名称为:calculation.cs的类型文件,显示如下:123456789101112using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace S1 class calculation说明calculatio

14、n类,程序见S1工程calculation.cs(1) 字符串中数字字符的判断注意在上述程序中,一定补充第5行的代码,我们要用这个对象判断一个字符到底是数字、还是运算符。在C#中,判断一个数字字符的方法来自正则表达式,有关正则表达式的介绍很多,请自己查找相关的资料,我们这里仅仅使用最简单的方法。首先说明一个正则表达式的对象: Regex R=new Regex(0-9);R对象将匹配字符0、一直到9,R对象将按这个原则去匹配另外一个对象,如字符串变量ch=”5”,就是说ch中是字符串5,于是下列语句的结果就是真:R.Match(ch).Success结果为真如ch=”A”,则语句:R.Matc

15、h(ch).Success结果为假(2) 字符串中取得一个字符的方法另外一个需要注意的是:C#中取字符串F中第n个字符的方法是:ch=F.SubString(n,1);后面的1代表取1个字符。首先是获得一个后缀表达式,我们这里用构造函数的方法来获得,就是:123456789101112131415161718192021using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace S1 class c

16、alculation string F,ch; int n, num1, num2,num; public calculation() F = ; ch = ; public calculation(string Formula) F = Formula; 说明calculation类,程序见S1工程calculation.cs 类中的变量名称我们依然使用S2.C中的习惯,Formula将是后缀表达式的字符串。 回顾我们在S2.C中编写的程序,其中有个函数Comput(ina a,int b,char o),这个函数是根据字符o中的运算符来计算a,b,我们需要补充到这个类里,值得注意的是:这个

17、函数我们仅仅需要在内部计算即可,而不能让对象中直接调用,这种情况下这个函数的前面就应该加上private的修饰。于是再次补充这个类就是:12345678910111213141516171819202122232425262728293031323334using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace S1 class calculation string F,ch; int n, num

18、1, num2,num; public calculation() F = ; ch = ; public calculation(string Formula) F = Formula; private int Comput(int a,int b,string o) int c=0; switch (o) case +: c = a + b; break; case -: c = a - b; break; case *: c = a * b; break; case /: c = a / b; break; default: c = 0; break; return c; 补充calcu

19、lation类之一:加入一个私有的方法,程序见S1工程calculation.cs注意这个函数中的语句,和C语言基本一致,但更加严格,比如c一开始就必须是给出0这样确定的值,default语句后也必须有break,相应的在case后的常数部分,C语言的case +,由于此时o是字符串,则在这里必须写成case “+”这些都是语言的细节所决定的,实际编程思路没有任何差异。这个方法从第21行开始。最后,就是补充根据后缀表达式计算的过程,这个过程就是说遇到数字先进栈、遇到运算符则数字出栈计算、计算结果再进栈,于是补充这个方法就是:12345678910111213141516171819202122

20、2324252627282930313233343536373839404142434445464748495051525354555657using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace S1 class calculation string F,ch; int n, num1, num2,num; public calculation() F = ; ch = ; public cal

21、culation(string Formula) F = Formula; private int Comput(int a,int b,string o) int c=0; switch (o) case +: c = a + b; break; case -: c = a - b; break; case *: c = a * b; break; case /: c = a / b; break; default: c = 0; break; return c; public int Result() Regex R=new Regex(0-9); Stack s=new Stack();

22、 n = 0; while (nF.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+; return s.Pop(); 补充calculation类之二:加入一个计算方法,程序见S1工程calculation.cs注意这个方法中第35行,在这个问题中,遇到数字要进栈,所以我们为一个整数构造了栈对象s,所以说明方法是:Stack

23、s=new Stack();这样栈可以把遇到的整数保存在栈里。而把字符转换成整数,一般用:Int.Parse(ch);这样的语句即可。(4)界面类测试程序设计到界面设计,鼠标双击计算按钮,进入编程界面,写入:123456private void button1_Click(object sender, EventArgs e)calculation C = new calculation(textBox1.Text);MessageBox.Show(该算式计算结果是+C.Result().ToString(),计算结果,MessageBoxButtons.OK); 测试后缀表达式计算的类,程序

24、见S1工程Form1.cs这个程序里,语句:calculation C = new calculation(textBox1.Text);说明创建一个对象C、其中包含类calculation中全部数据和函数,它运算所需要的后缀表达式来自textBox1.Text,也就是文本框中输入的字符。语句:MessageBox.Show(该算式计算结果是+C.Result().ToString(),计算结果,MessageBoxButtons.OK); 是用消息框的形式、把计算结果报告出来,注意我们的计算结果是整数,要转换成字符串才可以,也就是:该算式计算结果是+C.Result().ToString()

25、在这个方法的第2项:计算结果则把这个串显示在这个消息框的标题中;MessageBoxButtons.OK则是说这个消息框有一个OK的按钮,如下图。图3 运行结果消息框这些都是C#语言的定义,实际对一个熟悉C、正在学习VB6的人而言,C#的学习难度不是很大。通过上述介绍不难发现:使用C#完成栈的应用非常简单,而且有图形界面,运行结果可以很好地显示出来,这个是C语言不容易完成的事情,所以仅就WINDOWS开发而言,显然C#有这个极其强大的功能。作业1 C#完成将中缀表达式转换成后缀表达式的程序;2 C#中完成将中缀表达式直接计算出结果的程序。3 尝试编程能计算浮点数的四则运算。二、 JavaScr

26、ipt的栈以及应用JavaScript的栈是数组对象中自动提供的,这点如同C#,实际也不需要自己编写什么栈的程序,如果你用:var s=new Array();定义一个s的数组,则这个s上将有以下的方法可供使用:其中:FF: Firefox, IE: Internet Explorer方法描述FFIEconcat()连接两个或更多的数组,并返回结果。14join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。14pop()删除并返回数组的最后一个元素15.5push()向数组的末尾添加一个或更多元素,并返回新的长度。15.5reverse()颠倒数组中元素的顺序。14shif

27、t()删除并返回数组的第一个元素15.5slice()从某个已有的数组返回选定的元素14sort()对数组的元素进行排序14splice()删除元素,并向数组添加新元素。15.5toSource()返回该对象的源代码。1-toString()把数组转换为字符串,并返回结果。14toLocaleString()把数组转换为本地数组,并返回结果。14unshift()向数组的开头添加一个或更多元素,并返回新的长度。16valueOf()返回数组对象的原始值14而这个对象提供的属性,则如下表:FF: Firefox, IE: Internet Explorer属性描述FFIEconstructor返回对创建此对象的数组函数的引用。14index14input14length设置或返回数组中元素的数目。14prototype使您有能力向对象添加属性和方法。14由于JavaScript本身并没有什么具体类型,s将能保存任何对象,所以说JavaScript也是一个功能非常强大的语言。所以使用现有的栈是非常好的习惯,在这里先将几个字符串做进出栈的测试,就是:1234567891011121314151617181920212223242526

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1