基于JavaScript 数组的经典程序应用源码(强烈建议收藏)
Posted 刘一哥GIS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于JavaScript 数组的经典程序应用源码(强烈建议收藏)相关的知识,希望对你有一定的参考价值。
javascript数组
的定义、使用都是非常简单的,仅仅定义的话,就使用:
var a=new Array();
对于JavaScript的数组,大小不用管的,爱用多大的下标就用多大。
设计一个数组输入并显示的程序。
对后续的实验而言,要求能有一个数组、能输入数据、并显示结果,为满足这个要求,程序至少要有三个按钮:数据输入、数据显示、数组清除,所谓数组清除,就是当你的数据输入错误后,要能清除掉这个数组、给使用者重新输入的机会。后面肯定就是个文本框了。所以这种情况下,控件说明就是这样的:
<INPUT TYPE="button" ID=BUTTON1 value="数据输入" onclick='fIn()' />
<INPUT TYPE="button" ID=BUTTON2 value="数据输出" onclick='fOut()' />
<INPUT TYPE="button" ID=BUTTON2 value="数据清除" onclick='fCls()' />
<INPUT TYPE="input" ID="text1" style="z-index: 100; left: 11px; width: 248px; position: absolute; top: 40px"/>
注意这个text1控件的说明:它同过去的定义不一样,而是说明了位置属性,left:11px,说明这个控件离浏览器左边10个像素点,width:248px说明该控件宽度是248像素点,而后面的top:40px、则说明离浏览器高度是40个像素点。
我们可以打开a2.htm,这个网页文件,把上述控件说明写进去,并另存为a19.htm
分析:对于数组,我们定义一个就足够了,注意我们的数组、要在三个函数:fIn()、fOut()、fCls()中使用,所以,这个数组应该是全局的,同理,数组的大小也需要知道,我们用n来存储它的当前大小,n也应该是全局的、并且开始就是0,所以程序框架结构就是:
var a=new Array();
var n=0;
function fIn()
{
…
}
function fOut()
{
…
}
fCls()
{
…
}
对于fIn()函数,就是从text1中读到数据并给到a[ ],所以是:
function fIn()
{
var d=parseInt(text1.value);
a[n]=d;
n++;
text1.value=””;
}
n++的含义是准备写到下一个数组单元里。
而对fOut(),也很简单,就是:
function fOut()
{
var i;
for(i=0;i<n;i++)
document.write(a[i]+"<br>");
}
对多个数据的显示,我们选择document.write(),这样可以显示很多数据。
而对于fCls(),则使用重新构造数组并将n=0,这样,旧的数据就全没了
function fCls()
{
a=new Array();
n=0;
}
把上述代码全部凑到一起,构成新的网页,实际通过上述很多范例的分析,我们知道基本过程就是:
(1) 打开一个框架程序、如a2.htm这样的文件;
(2) 在框架文件里先填加控件的说明,让你的程序有足够的控件;
(3) 注意控件的事件响应函数的名称,不要搞错;
(4) 补充你的事件响应函数,到此就算完成了。
(5) 整个程序就是:
文件名:a19.htm
数组数据的输入和显示
<html>
<HEAD>
<TITLE>数组的输入</TITLE>
<SCRIPT TYPE="TEXT/JAVASCRIPT">
//这里要加入的是JAVASCRIPT的代码
var n=0;
var a=new Array();
function fIn()
{
var d=parseInt(text1.value);
a[n]=d;
n++;
}
function fOut()
{
var i;
for(i=0;i<n;i++)
document.write(a[i]+"<br>");
}
function fCls()
{
a=new Array();
n=0;
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FF1234">
<DIV>
<INPUT TYPE="button" ID=BUTTON1 value="数据输入" onclick='fIn()' />
<INPUT TYPE="button" ID=BUTTON2 value="数据输出" onclick='fOut()' />
<INPUT TYPE="button" ID=BUTTON3 value="数据清除" onclick='fCls()' />
<INPUT TYPE="input" ID="text1" style="z-index: 100; left: 11px; width: 248px; position: absolute; top: 40px"/>
</DIV>
</BODY>
</HTML>
数组输入和显示
这个程序的关键地方是要把事件响应函数和每个控件对应起来。
有了上述程序,后面的作业就可以逐个去完成了。所谓框架、这个程序就算一个吧,在这个程序基础上继续补充,就会非常方便。
选择排序
排序是一个很有意思的事情,选择排序的程序就是:
function SelectSort(x,num)
{
var i,j,t,m,min;
for(i=0;i<num;i++)
{
min=a[i];m=i;
for(j=i;j<num;j++)
if(x[j]<min)
{
min=x[j];m=j;
}
if(m!=i)
{
t=x[i];x[i]=x[m];x[m]=t;
}
}
}
其中x是一个数组,保存着待排数据,num是这个数组的大小。
查阅JavaScript,可以发现JavaScript得到数组长度很方便,就是x.length、或者是a.length,这样,我们再次修改SelectSort()就是:
function SelectSort(x)
{
var i,j,t,m,min;
var num=x.length;
for(i=0;i<num;i++)
{
min=a[i];m=i;
for(j=i;j<num;j++)
if(x[j]<min)
{
min=x[j];m=j;
}
if(m!=i)
{
t=x[i];x[i]=x[m];x[m]=t;
}
}
}
注意这个函数:它没针对a数组排序,实际就是说可以针对任何一个数组排序,所以需要一个主调函数去调用它,这个主调函数应该是一个按纽的事件响应函数。于是要再增加一个按纽:选择排序,就是:
注意它的事件响应函数是fSort(),于是补充函数:
function fSort()
{
SelectSort(a);
}
这样,整个程序就是:
文件:a20.htm
选择排序
<HTML>
<HEAD>
<TITLE>选择排序</TITLE>
<SCRIPT TYPE="TEXT/JAVASCRIPT">
//这里要加入的是JAVASCRIPT的代码
var n=0;
var a=new Array();
function SelectSort(x)
{
var i,j,t,m,min;
var num=x.length;
for(i=0;i<num;i++)
{
min=a[i];m=i;
for(j=i;j<num;j++)
if(x[j]<min)
{
min=x[j];m=j;
}
if(m!=i)
{
t=x[i];x[i]=x[m];x[m]=t;
}
}
}
function fIn()
{
var d=parseInt(text1.value);
a[n]=d;
n++;
text1.value="";
}
function fOut()
{
var i;
for(i=0;i<n;i++)
document.write(a[i]+"<br>");
}
function fCls()
{
a=new Array();
n=0;
}
function fSort()
{
SelectSort(a);
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FF1234">
<DIV>
<INPUT TYPE="button" ID=BUTTON1 value="数据输入" onclick='fIn()' />
<INPUT TYPE="button" ID=BUTTON2 value="数据输出" onclick='fOut()' />
<INPUT TYPE="button" ID=BUTTON3 value="数据清除" onclick='fCls()' />
<INPUT TYPE="button" ID=BUTTON4 value="选择排序" onclick='fSort()' />
<INPUT TYPE="input" ID="text1" style="z-index: 100; left: 11px; width: 248px; position: absolute; top: 40px"/>
</DIV>
</BODY>
</HTML>
选择排序
从上述程序我们可以看到:我们的程序已经开始逐渐变大,实际上选择排序并不是很大,但现在,我们要假设:我们的排序程序非常大,实际中,排序要好多种方法。
把一个很大的程序包装在一个网页里、并不明智,这会让这个网页打开过程非常慢,于是我们要想办法把网页内容分割成一些小包,比如我们的排序程序,要从a20.htm中分割出来。分割过程如下:
1 我们先打开记事本,把SelectSort()函数复制过去、另存为Sort.js;
2 把SelectSort()从a20.htm中删除掉、a20.htm另存为a21.htm;
现在我们肯定知道:a21.htm必须引用Sort.js才能进行排序,否则fSort()函数里根本找不到SelectSort()在哪里。引用一个程序包、如Sort.js,使用的语句是:
<SCRIPT TYPE="TEXT/JAVASCRIPT" src="sort.js"></SCRIPT>
注意src=””这个描述,它代表的是从本地硬盘、当前文件夹中引用这个程序包,也可以是这样的描述:
这代表着将从一个网站:www.abcd.com上获得这个程序包。
在实际中,由于浏览器都采用了多线程技术、网站也有很多端口,分割成小包文件下载、速度要快的多。
这样,整个程序就是:
文件名:Sort.js
排序函数包,目前仅仅是选择排序
function SelectSort(x)
{
var i,j,t,m,min;
var num=x.length;
for(i=0;i<num;i++)
{
min=a[i];m=i;
for(j=i;j<num;j++)
if(x[j]<min)
{
min=x[j];m=j;
}
if(m!=i)
{
t=x[i];x[i]=x[m];x[m]=t;
}
}
}
排序程序包
文件:a21.htm
调用排序包的排序网页
<HTML>
<HEAD>
<TITLE>选择排序</TITLE>
<SCRIPT TYPE="TEXT/JAVASCRIPT" src="sort.js"></SCRIPT>
<SCRIPT TYPE="TEXT/JAVASCRIPT">
//这里要加入的是JAVASCRIPT的代码
var n=0;
var a=new Array();
function fIn()
{
var d=parseInt(text1.value);
a[n]=d;
n++;
text1.value="";
}
function fOut()
{
var i;
for(i=0;i<n;i++)
document.write(a[i]+"<br>");
}
function fCls()
{
a=new Array();
n=0;
}
function fSort()
{
SelectSort(a);
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FF1234">
<DIV>
<INPUT TYPE="button" ID=BUTTON1 value="数据输入" onclick='fIn()' />
<INPUT TYPE="button" ID=BUTTON2 value="数据输出" onclick='fOut()' />
<INPUT TYPE="button" ID=BUTTON3 value="数据清除" onclick='fCls()' />
<INPUT TYPE="button" ID=BUTTON4 value="选择排序" onclick='fSort()' />
<INPUT TYPE="input" ID="text1" style="z-index: 100; left: 11px; width: 248px; position: absolute; top: 40px"/>
</DIV>
</BODY>
</HTML>
排序网页
有了这样的程序包,我们编写其他排序函数也就方便的多。现在我们首先在Sort.js中补充一个冒泡排序函数,所以首先打开Sort.js文件,补充代码如下:
function BubbleSort(x)
{
var num=x.length;
var i,j,t;
for(i=0;i<=num-2;i++)
for(j=0;j<=num-i-1;j++)
if(x[j]>x[j+1])
{
t=x[j];x[j]=x[j+1];x[j+1]=t;
}
}
有了这个排序函数后,在a21.htm中修改:
function fSort()
{
BubbleSort(a);
}
这样就能调用BubbleSort()函数进行排序了。如果你不希望每次都输入数据,你还可以修改成这样:
function fSort()
{
a=[2,4,6,8,10,1,3,5,7,9];
n=10;
BubbleSort(a);
}
最后,在Sort.js中补充一个新的排序方法RadixSort(),自己分析一下算法。
杨辉三角形
这个三角形就是:
实际,就是(a+b) 、当n=1,2,3,4….时候的系数。分析这个三角形还是不难发现其规律的。于是设计中可以用一个二维数组,先把每行最开始的数字和最末尾的数字写进去:
#include<stdio.h>
main()
{
int i,j,a[10][10];
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=0;
//每行最开始的和最末尾的数字都是1
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%d ",a[i][j]);
printf("\\n");
}
}
真正的处理是这样的:
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
就是前一行的前一个+前一行的当前列的值。
于是整个程序就是:
#include<stdio.h>
main()
{
int i,j,a[10][10];
for(i=0;i以上是关于基于JavaScript 数组的经典程序应用源码(强烈建议收藏)的主要内容,如果未能解决你的问题,请参考以下文章