`
rzheny
  • 浏览: 9434 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

数组实现的队列和链表实现的队列区别和联系

 
阅读更多

队列既可以用数组来实现也可以用链表来实现:

      1.数组实现思路:

         首先想好其中的各种方法,比如添加,删除,获取长度,获得指定位置的元素啦。。。

         然后定义一个数组(可以是0长度的,比较简单天真);

         然后每次添加删除的时候就重新定义新长度的数组就好了;

         然后就是按照对应位置赋好值就行了,比较简单。

         新写的代码,比较简单:

         

//定义数组实现的队列
public class ArrayList{
    
    public static void main(String [] args){
     ArrayList al=new ArrayList();
     Stuent stu=new Student();
     stu.name="lili";
     stu.score=100;
     stu.sex="F";
     Stuent stu1=new Student();
     stu1.name="lilei";
     stu1.score=10;
     stu1.sex="M";
     al.add(stu1);
     system.out.println("al长度为"+al.size);
     al.delete(1);
     system.out.println("al长度为"+al.size);
    }


    Student[] stu=new Student[0];
    //实现功能将stu添加到数组的末尾
    public void add(Student stun){
     Student[] stu1=new Student[stu.length+1];
     for(int i=0;i<stu.length;i++){
       stu1[i]=stu[i];
      }
      stu1[stu.length]=stun;
      stu=stu1;
   }

   //实现功能删除某个位置的元素
   public void delele(int index){
    Student[] stu2=new Student[stu.length-1];
    for(int i=0;i<stu.length-1;i++){
       if(i<index){stu2[i]=stu[i];}
       else{stu2[i]=stu[i+1];}
      }
      stu=stu2;
    }

    //实现获取队列长度的方法
    public int size(){
     return stu.length;}

}

    相关类Student:

    

public class Student{
   
   public String name;
   public int score;
   public String sex;



}

   2.然后是关于链表实现的队列

      在每个节点里要定义自己存储的信息和下一个节点,然后按照我的经验和教训啊,写链表类的时候要把根节点什        么的定义为全局的,下面就可以直接调用啦,这样比较简单,我犯的错误就是把add方法里面的那个中间变量定义在了方法        里面,每次调用都会重新创建,本来应该用上一次的地址去指向下一个的,就变成了每次创建新节点指向下一个,就报空          指针, 其余就都是一些小问题了。

       直接上代码:

       

public class LinkList{
    
	LinkNode root;
   LinkNode last;
   LinkNode temp = null;
    public void add(LinkNode ln){
      if(root==null){
    	  root=ln;
    	  temp=root;
    	  System.out.println("root为"+temp.data);
      }
      else{
    	  last=ln;
    	  temp.next=last;
    	  temp=last;
    	  System.out.println("下一个为"+last.data);
      }


   }


   public void delete(int index){
       LinkNode parent=root;
       LinkNode lNode=root;
       int count=0;
       while(count<index-1){
    	   parent=parent.next;
    	   count++;
       }
       int coun=0;
       while(coun!=index){
    	   lNode=lNode.next;
    	   coun++;
       }
       parent.next=lNode.next;
       



   }



  public int length(){
	   int count=0;
	      LinkNode temp;
	      temp=root;
	      while(temp!=null){
	    	  temp=temp.next;
	    	  count++;
	      }
      return count;

  }


  public static void main(String [] args){
       LinkNode lNode=new LinkNode();
       lNode.data="abacccc";
       LinkNode lNode1=new LinkNode();
       lNode1.data="mqh";
       LinkList ll=new LinkList();
       ll.add(lNode);
       System.out.println("长度为"+ll.length());
       ll.add(lNode1);
       System.out.println("长度为"+ll.length());
       ll.delete(1);
       System.out.println("长度为"+ll.length());
   }
}

     关于节点类LinkNode的定义:

    

public class LinkNode{

    public Object data;
    public LinkNode next;

}

    3.区别:1思路不同,一个是数组,一个是链表,所以两个的写法也不同,数组占连续的内存所以不需要考虑到下一个指向问                       题,而链表可以不占连续的内存,所以要考虑下一个的指向问题,这也是侧重点;

                    2.两个侧重不同,数组取出其中的数据比较方便,只要直接去array[i]即可,而链表就必须遍历了,这个比较麻烦;

                       数组增删比较麻烦,要把其中每个数据都取出重新放入新数组,而链表就比较方便只需改变前后两个节点的指向                          即可。

     4.夜已深,一首小词送给大家:

            临江仙   梦后楼台高锁

         北宋  晏几道

梦后楼台高锁,酒醒帘幕低垂。去年春恨却来时,落花人独立,微雨燕双飞。
记得小苹初见,两重心字罗衣。琵琶弦上说相思,当年明月在,曾照彩云归.。
谁说程序员不能有一颗文艺的心?
分享到:
评论

相关推荐

    数组和链表实现队列

    本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...

    队列的链表与数组分别实现

    本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...

    循环数组实现队列

    循环数组实现队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列的操作受限制,和栈一样,它是一种操作受限制的线性表。进行插入操作的...

    go语言通过数组和链表的方式实现队列 数组和链表.pdf

    "go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...

    数组、链表、队列、栈的区别和联系 数组和链表.pdf

    数组、链表、队列、栈的区别和联系 在数据结构中,数组、链表、队列、栈是四种常用的数据结构,它们之间有着紧密的联系,但同时也存在着许多区别。本文将详细介绍数组、链表、队列、栈的区别和联系。 一、数组和...

    数据结构学习代码,内容包括:稀疏数组、队列、链表、栈、递归的使用、排序

    数据结构学习代码,内容包括:稀疏数组、队列、链表、栈、递归的使用、排序算法、查找算法、哈希表、树结构_DataStructure

    线性结构和非线性结构、稀疏数组、队列、链表(LinkedList) 数组和链表.pdf

    - 链表:如单向链表、双向链表和循环链表等。 - 栈:一种后进先出(LIFO)的数据结构,用于表达式求值、函数调用栈等。 #### 二、非线性结构 非线性结构指的是数据元素间的关系不是简单的线性关系,而是更复杂的...

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...

    循环链表队列 循环数组队列的代码实现

    本文将深入探讨两种队列实现方式:循环链表队列和循环数组队列,并通过代码示例进行详细解析。 #### 循环链表队列 循环链表队列是一种使用链表实现的队列,其中最后一个节点的指针指向第一个节点,形成一个循环。...

    C++循环队列模版(数组和链表两种实现方式都有)

    链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...

    数组、链表、队列、栈数据结构特点,各自优点和缺点 数组和链表.pdf

    数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...

    数组、链表、堆栈和队列、线性表和顺序表 数组和链表.pdf

    数组、链表、堆栈和队列、线性表和顺序表 数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。...理解不同的数据结构可以帮助开发者更好地设计和实现程序,提高程序的效率和可读性。

    C语言数组形链表实现

    在C语言中,数组形链表是一种特殊的数据结构,它结合了数组的高效访问和链表的灵活扩展性。这种数据结构通常用于处理动态数组,其中元素可以方便地添加或删除,而不需要像传统数组那样预先知道确切的大小。本文将...

    数组的扩容和链表结构.zip

    在Java编程语言中,数组和链表是两种基础且重要的数据结构。它们各自有独特的特点和使用场景,尤其是在处理大量数据时,理解它们的工作原理和性能特性至关重要。本压缩包文件"数组的扩容和链表结构.zip"包含了关于...

    约瑟夫环问题(数组实现,链表实现

    约瑟夫环问题,也被称为...无论是数组还是链表实现,都需要对数据结构有深入的理解,并能够根据问题特点灵活选择合适的方法。在实际应用中,我们可以根据问题规模、内存限制以及计算性能要求,来决定采用哪种实现方式。

    同步java之数组与队列

    为了实现队列操作,数组队列通常需要两个额外的变量来跟踪队头和队尾。添加元素时,如果队列已满,则需要进行扩容操作;移除元素时,如果队列为空,会抛出异常。这种基于数组的队列虽然在空间效率上比链表实现的队列...

    常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf

    常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf

Global site tag (gtag.js) - Google Analytics