`
木有鸟的脚
  • 浏览: 5112 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

数据结构总结(1)

阅读更多
    经常听技术大牛提起数据结构,数组,链表,树,图等概念,不明觉厉呀,现在我们好好探讨一下吧 
   
      这里是度娘给的定义:
         数据结构:是相互之间存在一种获多种特定关系的数据元素的集合。
       说白了,也就是数据元素之间关系(排序?排序方式)。我们在这里可以对我们学到的集中数据结构简单分析一下。
      
        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);    
  }
}



 
至于其他数据类型,我们稍后再议。 




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics