世上焉有无双数,万般玄机谁可知,我本杯中一浮游,何来笑谈青莲久
--山鬼Sakura
大家好,这里是山鬼,一个热爱古风的汉子,很高兴与大家相识,讲到数据结构,我与它之间还有一段不解之缘。
那时的我还是一个初涉计算机编程的懵懂高中少年,记得那是一个阳光不算明媚的下午,计算机课上的老师炒着股,我们坐在各自的电脑前,偷偷的打着局域网下的Dota,依稀记得那一场我们胜了,欢呼着,雀跃着,哪怕只是同学之间的小比赛,只是不知何时,老师悄然的出现,沉默了一切,这是一切故事的开始。
老师显然有些气愤,说要告诉班主任,取消计算机课,我慌了,一时激动之下,站了起来,向老师发起了挑战,如果我编程赢了他,就不许告诉班主任,要是输了,也不许告诉班主任(就任凭处置),题目一人出两题,emmmm,他没说话,随手打开了我对面的一台电脑,显然是默许,我有些心虚,但还是鼓起勇气打开了编辑器,比试的内容是几个基础的编程题,最后一题是一个回文,前面的几题逻辑简单,实现起来也较为轻松,没有人出现问题,只是最后一题,我试了好几种方法,都没能成功,心灰意冷的我只能放弃,想着以后没有计算机课的生活会是如何。万万没想到,最后结果是平局,谁也没赢,原因是老师的代码运行后测试出现了问题,于是这件事就在时间的推移中渐渐被淡忘,直到我开始接触了数据结构数据结构,顾名思义,是一种数据的结构,结构是框架,数据是内容,能成为结构的数据,从来不会是单一的,也就是说,这是一种由众多数据在一定规律的排列方式下形成的结构体,目前常用的有列表,链表,图,树等,但是这是已有的通用结构,而我们在开发的过程中也会偶尔突发奇想,创新出新的数据存储结构,这也是数据结构
在数据结构中,基本的实现都已依存与数据的存与读的方式,比如先入先出,先入后出等
这里举个简单的例子
function List() {
this.length=0; //可用作长度的存储或者最后一个数据的index
this.Data=[]; //用作数据的存储
//this.getIndex=getIndex; 获取到指定元素的索引
//this.clear=clear; 清除数据
//this.append=appened; 添加数据
//this.remove=remove; 移除某一元素
//this.insert=insert; 插入某一元素
//this.MoveTo=MoveTo; 将元素进行调整
}然后我们来实现其所需要的功能
List.prototype.append=function(ele) {
// 往数据中添加元素,并且将List的长度增加1
this.Data.push(ele);
this.length++;
return true;
};
List.prototype.remove= function(ele) {
//获取要移除元素的索引,然后判断是否存在,如果在则移除,总长度减1
var pos=this.getIndex(ele);
if(pos>-1){
this.Data.splice(pos,1);
this.length--;
return true;
}else{
return false;
}
};
List.prototype.getIndex=function(target){
//判断元素是否存在,如果存在就返回其索引
for(var i=0;i<=this.length-1;++i){
if(this.Data[i]==target){return i;}
else{
if(i==this.length-1){return -1;}
}
}
};
List.prototype.insert=function(ele,index){
//判断要插入的值是否在List总长度内,如果在则插入,不在则直接添加到最后
if(index>this.length){
this.append(ele);
}else{
this.Data.splice(index,0,ele);
this.length++;
}
};
List.prototype.MoveTo=function(pos1,pos2){
//数据的交换,需要考虑到数据的存在性
if(pos1>this.length || pos2>this.length){
//通过判断pos是否在Data长度之内来做处理
var min=Math.min(pos2,pos1);
var max=Math.max(this.length,min);
if(max==this.length){
var data=this.Data[min];
this.remove(min);
this.append(data);
return true;
}else{
return false;
}
}else{
var ele1=this.Data[pos1];
var ele2=this.Data[pos2];
this.Data[pos2]=ele1;
this.Data[pos1]=ele2;
return true;
}
};
List.prototype.clear=function(){
//数据的清除
this.Data=[];
};
这时候我们来做测试
var b=new List();
b.append(1);
b.append("heiej");
b.insert(2,1);
b.MoveTo(0,1);
b.remove(1);
output:2 1 heiej
直到如今,我才明白老师当初为什么出现错误,不是因为因为逻辑错误,而是在条件判断的时候忽略了一些条件的可能性。
有人说故事到这里就要结束了,谁知道呢,总之吧,希望我的文章可以给你带来一些感想。
因为平时上课的原因,我会保持每周最少两更.see you;