经常听技术大牛提起数据结构,数组,链表,树,图等概念,不明觉厉呀,现在我们好好探讨一下吧!
这里是度娘给的定义:
数据结构:是相互之间存在一种获多种特定关系的数据元素的集合。
说白了,也就是数据元素之间关系(排序?排序方式)。我们在这里可以对我们学到的集中数据结构简单分析一下。
1.连续的:数组,栈等
2.非连续的:链表,树,二叉树,图等
3.两者都有的:hash表,数组队列等
很明显,连续的数据结构在更便于查找,但不利于修改,删除,插入等操作。而非连续的恰恰相反。到这里,我们可以用理论更好的说明(时间复杂度和平均查找时间):拿链表来说吧,假如 LinkList list = new LinkList();
list.root = node0;
for(int i=1;i<10;i++){
list.add(node+"i");
}
一个长度为10的链表,那么如果要在这个数组里查找一个数据的时间复杂度为:
T(n)= O(f(n))= 10,
//查找方法
public Node getNode(int index){//是否越界
if(this.getLength()<index||index<0){
throw new java.lang.RuntimeException("下标越界"+index+",size:"+this.getLength());
}else{
int num = 0; //计数器,用来判断是否为要得到的节点
Node node = root;
while(num!=index){//需要依次判断
node = node.getNext();
num++;
}
System.out.println(""+node.getdate()+" 数据已被取到");
return node;
}
}
而如果删除或添加一个数据,则可以非常方便的就能办到,即:删除或添加一个元素的时间复杂度为1.
//添加节点
public void add(Object obj){
Node node = new Node();
if(null==root){ //链表为空时,添加的节点即为根节点
root = node;
tail = root;
}else{ //链表不为空时,在尾节点后添加该节点
tail.setNext(node);
tail.setprivious(node);
tail = node;
}
size++; //计时器,用来统计节点的个数,即:链表长度
}
/*
* 在指定位置插入节点
*/
public void insertIndex(int index,Object cf){
if(this.getLength()<index||index<0){
throw new java.lang.RuntimeException("下表越界:"+index+",size:"+this.getLength());
}else{
Node newNode = new Node();
Node node = this.getNode(index);
if(index==0){
root = newNode;
}else{
Node fNode = node.getprivous();
fNode.setNext(newNode);
newNode.setprivous(fNode);
}
newNode.setNext(node);
node.setprivous(newNode);
}
}
/*
* 删除指定位置节点(根据节点删) (添加通过内容删)
* 索引1
*/
public String deleteNode(int index){
if(this.getLength()<index||index<0){
throw new java.lang.RuntimeException("下表越界:"+index+",size:"+this.getLength());
}else{
Node node = this.getNode(index);//索引到要删除的节点
Node fNode = node.getprivous();//上一位置
Node cNode = node.getNext();//下一位置
if(fNode == null){
root = cNode;
}else if(cNode==null){
fNode.setNext(null);
}else{
fNode.setNext(cNode);
cNode.setprivous(fNode);
System.out.println("第"+(++index)+"个节点已被删除");
}
//System.out.println("第"+index+"已被删除");
}
size--;
return this.toString();
}
/*
* 通过内容内容删除节点的方法
* 索引2
*/
public int deleteNode(Object cf){
int index = 0;
if(size>index&&index>0){
if(cf.equals(root)){
Node node = this.getNode(index);//索引到要删除的节点
Node fNode = node.getprivous();//上一位置
Node cNode = node.getNext();//下一位置
fNode.setNext(cNode);
cNode.setprivous(fNode);
System.out.println("第"+index+"个节点的数据已被删除!");
size--;
}else if(!cf.equals(root)){
index++;
}else{
System.out.println("该链表内没有对应的数据!");
}
}
else{
System.out.println("该链表内没有对应的数据!");
}
return index;
}
/*
* 修改指定位置节点的数据
*/
public void UpdataNode(int index,Object cf){
if(this.getLength()<index||index<0){
throw new java.lang.RuntimeException("下标越界:"+index+",size:"+this.getLength());
}else{
Node node = this.getNode(index);
// node.setstu(cf);
}
}
至于其他数据类型,我们稍后再议。
分享到:
相关推荐
第一章绪论1.1时间复杂度的求法(一)循环主体中的变量参与循环条件的判断a) 找出基本操作b) 设基本操作执行次数为 T(n),根据初始条件和基本操作语句确定变
java数据结构总结java数据结构总结java数据结构总结java数据结构总结java数据结构总结
acm数据结构总结.doc acm数据结构总结.doc
数据结构,总结数据结构,总结数据结构,总结数据结构,总结数据结构,总结数据结构,总结数据结构,总结数据结构,总结数据结构,总结
电子科技大学820数据结构总结
java 数据结构总结的思维导图笔记,个人做的非常全,需要的自行下载
这是所有的本人学习数据结构时涉及的课程实验总结!!!
学数据结构愁眉苦脸者,这里有数据结构中常用的经典算法。。快来看啦
考研数据结构算法总结
数据结构与算法基础知识总结.pdf数据结构与算法基础知识总结.pdf数据结构与算法基础知识总结.pdf数据结构与算法基础知识总结.pdf数据结构与算法基础知识总结.pdf数据结构与算法基础知识总结.pdf
计算机考研数据结构总结.pdf
1.1 数据结构的基本概念 1.1.1 基本概念和术语 1.数据 2.数据元素:可由若干数据项组成,数据项是不可分割的最小单位 3.数据对象:具有相同性质的数据元素的集合 4.数据类型:是一个值的集合和定义在此集合上一...
数据结构: 1 算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确...
C语言数据结构算法总结;
数据结构考研知识点总结.pdf
大学数据结构的总结,适合大学生小伙伴们数据结构期末考试,总结概念等
数据结构考研总结PDF超清,超全
数据结构知识点总结
计算机专业数据结构课程设计,花费了我一周的时间,总于将这个报告做完了,值得下载分享一下,想能给各位带来用处。
这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解 ,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料 的能力。培养独立思考,深入研究,分析问题、解决...