队列既可以用数组来实现也可以用链表来实现:
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.夜已深,一首小词送给大家:
临江仙 梦后楼台高锁
北宋 晏几道
相关推荐
线性结构和非线性结构、稀疏数组、队列、链表(LinkedList) 数组和链表.pdf
利用数组和链表实现队列的基本操作,如入队,出队,读出队首元素
在队列的代码中,引用了链表的代码
python利用数组和链表实现栈和队列 数组和链表.pdf
队列关于数组与链表的实现, linux c语言
go语言通过数组和链表的方式实现队列 数组和链表.pdf
数组、链表、队列、栈数据结构特点,各自优点和缺点 数组和链表.pdf
数组、链表、队列、栈的区别和联系 数组和链表.pdf
数组、链表、堆栈和队列、线性表和顺序表 数组和链表.pdf
java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf
循环链表队列的代码实现 循环数组队列的代码实现
常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf
两个文件 一个是数组实现循环队列 一个是链表实现 功能是常用的基本功能 希望对大家有所帮助
超级数组和链表及栈队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例
数据结构实验报告+代码(链表 二叉树 图 字符串 数组 排序 队列 栈)
包含内容:栈、队列、循环队列的数组实现方式和链表实现方式
【数据结构课程设计】 数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 实现两个有序数组合并为一... 用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 ......
在链式队列的实现中,我们需要使用链表结点QNode来存储队列元素,并使用链表指针来指示队首和队尾的位置。 比较 顺序队列和链式队列都是常用的队列实现方式,各有其优缺。顺序队列的优点是实现简单、队列元素可以...