当前位置:首页 > 开发 > 编程语言 > 数据结构 > 正文

数据结构—数组和链表

发表于: 2014-11-18   作者:指间舞   来源:转载   浏览:
摘要:   数据结构—数组和链表        一、数组是连续线性的结构,所储存的数据长度是不可更改的,不能对其进行插入,删除,修改的操作。      身份证号的存储是数组,由于长度不够,从15位扩展到了18位。       &n

  数据结构数组和链表

 

     一、数组是连续线性的结构,所储存的数据长度是不可更改的,不能对其进行插入,删除,修改的操作。

     身份证号的存储是数组,由于长度不够,从15位扩展到了18位。

               

 

          定义数组的四种方式:

                  1:数组类型[] 数组名= new 数组类型[长度]

                  2:数组类型[] 数组名={…};

                  3:数组类型[] 数组名=new 数组类型[]{…}

                  4:数组类型[] 数组名;

                       数组名= new 数组类型[长度]

 

     二、链表的存储是离散的,它的长度在建成之后可以改变,并且可以对其进行删改的操作。

     链表是由节点组成的,节点包括数据域和引用域,数据域中存储数据,引用域内存储下一节点的地址,由引用使节点联系起来,实际存储的位置可以是分散的。

 

//定义一个节点类
public class Node<E> {
 // 定义一个数据域
 public E data;

 // 定义一个引用域
 public Node next;

 public Node(E data) {
  this.data = data;

 }

 public Node getnext() {
  return next;
 }

 public void setnext(Node next) {
  this.next = next;
 }

  

     三、相较于数组,链表更多应用在灵活性的数据上,例如Q、电话号的存储

         相较于链表,数组最大的优点是可以直接根据下标找到数据,查询更方便,而链表必须从头节点开 始一次查找。

 

     四、数组队列

     因为数组的长度一旦确定就不能改变,所以当我们要改变长度时,必须开辟一个新的存储空间,重新定义数组的长度,将原数组内容进行复制,并加入新的内容,这就形成了数组队列。

public class Array {
   private Object[] a=new Object[0]; 
   int size=0;
 
   //添加数组
   public void add(Object obj){
       size++;
       //创建一个长度+1的数组
     Object [] a1=new Object[size];
    if(size==0){
     
     a1[0]=obj;
    //原数组指向新的数组 
     a=a1;
    }
     //把原数组的内容复制给新数组
     for(int i=0;i<size-1;i++){
      a1[i]=a[i];
      
     }
     //把obj给新数组的最后一个位置
         a1[size-1]=obj;
     //原数组指向新的数组
         a=a1;
        }
   
   //删除数组
   public void remove(int index){
    if(index>=0&&index<size){
     size--;
     //创建一个长度-1的数组
     Object a2[]=new Object[size];
     a[index-1]=0;
     for(int i=0;i<index-1;i++){
      //把要删除的位置前面的数组赋值到新的数组里
      a2[i]=a[i];
     }
     for(int i=index;i<size;i++){
      //把要删除的位置后面的数组赋值到新的数组里
      a2[i]=a[i];
     }
     //将原来的数组指向新的数组
          a=a2;
     
    }
    
   }
   
   //得到数组元素的个数
    public int getsize(){
     return size;
    }
   //获取数组内容
    public Object gets(int i){
     if(i>=0&&i<getsize()){
      Object  obj=a[i];
      return obj;
      
     }
         return null;
    }
   
}

 

      五、链表的队列

      引用将节点建立联系,并可以进行节点的添加、删除、插入(待完成)等操作。

//定义一个链表类
public class LinkedNode<E> {
 private Node root;// 头节点

 private Node tail;// 尾节点

 private int size = 0;// 记录节点总数的计数器
 
 private int index;

    private E data;
 static Node node;
 Node node1;

 private static LinkedNode link;
 

 

 // 添加节点的方法

 public void add(Node node) {
  // System.out.println("调用了add方法");
//  Node node1 = new Node(data);
  // 判断头节点为null
  if (root == null) {
   root = node;// 将新节点给头节点
   tail = node;// 将新节点给尾节点
   System.out.println("第一个节点" + node);
  }
  // 将新节点添加到尾节点的后面
  else {
   tail.setnext(node);// 将新节点设置为尾节点的下一节点

   tail = node; // 将新添加的节点作为尾节点

   System.out.println("新加节点" + node);

  }
  size++;
 }

  //移除指定索引位置的数据
 
 public Node remove(int index) {
  // 循环的节点
  Node node = root;
  // 移除的节点
  Node removeNode;
  if (index == 0) {
   root = node.getnext();
   removeNode = node;
  } else {
   for (int i = 0; i < index - 1; i++) {
    node = node.getnext();
   }
   // 判断移除的节点是否是最后一个
   if (index == size - 1) {
    removeNode = node.getnext();

    node.setnext(null);
   } else {
    // 将node的下一个节点赋给要移除的节点
    removeNode = node.getnext();

    Node nextNode = removeNode.getnext();
    node.setnext(nextNode);
   }
  }
  size--;
  // 返回要删除节点的数据域对象
  return removeNode;

 }

 
 // 获取指定索引位置节点的参数
 public Node get(int index) {
  if (index < 0 || index >= size){
   return null;
   }
  Node node = root;
  // 循环获取到指定位置的诗句
  for (int i = 0; i < index; i++) {
   node = node.getnext();

  }

  return node;

 }
 
    


 // 返回链表中节点总数
 public int size() {
  return size;
 }

}

  

 

 

数据结构—数组和链表

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
众所周知,在计算机中要对给定的数据集进行若干处理,首要任务是把数据集的一部分(当数据量非常大
这几年一直做企业ERP基础架构,对于算法领域的知识使用的较少,前两天被他人问及链表如何实现,草草
转自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html 《数据结构》这门课是计算机
图解数据结构(1)——大圈表示法、动态数组和单向链表 《数据结构》这门课是计算机专业的核心课程
本节知识点: 1.静态链表到底是什么:链表就是链式存储的线性表,但是它分为 动态和 静态两种,所谓
转载自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html 《数据结构》这门课是计算
表是一种最基础的数据结构,常见的实现方式有使用数组方式实现(例如C++里STL中的Vector),用数组
本文主要介绍一些解决单向链表上部分操作问题的思路和代码实现。 主要的问题包括以下几点: 1 向单
1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列。线性表的特征是在
1.为了弄清楚链表和数组的区别,首先要做的是实现一个数组和链表。本实例采用Java实现。 2.打开记事
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号