java使用数组和链表实现队列示例
更新时间:2014年01月29日 11:13:08 作者:
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例
(1)用数组实现的队列:
复制代码 代码如下:
//先自己定义一个接口
public interface NetJavaList {
public void add(Student t); //继承该接口的类必须实现的方法
public Student get(int index);//队列的加入,取出,队列的大小
public int size();
}
定义一个学生类
复制代码 代码如下:
class Student {
private String name ; //私有属性 名字,学分
private int score ;
public Student(String name , int score){
this.name = name ;
this.score = score ;
}
public void printInfo(){
System.out.println("姓名"+name + "学分"+score ) ;
}
}
实现自定义接口
复制代码 代码如下:
public class STList implements NetJavaList{
private Student[] str = new Student[0] ;
//增加队列的元素
public void add(Student t) {
Student[] src = new Student[str.length+1];
for(int i=0;i<str.length;i++){
src[i]=str[i] ;
}
src[str.length]=t ;
str = src ;
}
//得到队列中的某个元素
public Student get(int index) {
Student t = str[index];
return t;
}
//返回队列的长度
public int size() {
return str.length;
}
}
写个主函数类实现下队列
复制代码 代码如下:
public class Manager {
public static void main(String[] args) {
STList sil = new STList() ;
for(int i=0;i<5;i++){
Student st = new Student("name"+i,i*10);
sil.add(st);
}
printList(sil) ;
}
//输出队列中的所有元素
public static void printList(STList t){
for(int i=0;i<t.size();i++){
Student f =t.get(i);
f.printInfo();
}
}
}
(2)链表实现的队列
先定义一个节点类;
复制代码 代码如下:
public class LinkNode {
private Object obj ; //节点内的数据对象
private LinkNode next ; //对下一个节点的引用
//在创建节点对象的时候就传入节点的数据对象
public LinkNode(Object obj){
this.obj = obj ;
}
public Object getObj(){
return obj ;
}
public void setObj(Object obj){
this.obj = obj ;
}
public LinkNode getNext(){
return next ;
}
public void setNext(LinkNode next){
this.next =next ;
}
}
然后写个队列的实现方法类
复制代码 代码如下:
public class LinkList {
public static LinkNode root ;//第一个节点
public LinkNode last = null ;//最后的一个节点
public static void main(String ara[]){
LinkList df = new LinkList() ;
df.add(1);
df.add(2);
df.add(3);
df.printLinkList(root);
df.move(root,2) ;
df.move(root,2) ;
df.printLinkList(root);
}
/*
* 插入节点
*/
public void add(Object obj){
//创建一个新的节点
LinkNode t = new LinkNode(obj);
if(root ==null){
root = t ;
last = root ;
}else{
last.setNext(t);
last = t ;
}
}
/*
* 输出操作
*/
public void printLinkList(LinkNode root){
if(null != root){
Object data = root.getObj();
System.out.println(data);
LinkNode temp = root.getNext();
printLinkList(temp) ;
}
}
/*
* 删除操作
*/
public LinkNode move(LinkNode root,int index){
if(this.getLength()<index || index <0){
throw new RuntimeException("下标越界:"+index +
",size:" +this.getLength()) ;
}else{
int count = 1 ;LinkNode sd = root ;
while(count!=index-1){
sd = sd.getNext();
}
sd.setNext(sd.getNext().getNext());
return root ;
}}
/*
* 得到链表的长度
*/
public int getLength(){
int count = 0 ;
if(root==null){
return count ;
}
LinkNode node =root.getNext();
while(null != node){
count ++ ;
node=node.getNext();
}
//System.out.println((count+1));
return count+1 ;
}
}
相关文章
spring-boot-starter-validation 校验参数的实现
参数校验在很多地方都可以用到,本文主要介绍了spring-boot-starter-validation 校验参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-04-04
从零开始让你的Spring Boot项目跑在Linux服务器
这篇文章主要给大家介绍了如何从零开始让你的Spring Boot项目跑在Linux服务器的相关资料,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上,需要的朋友可以参考下2021-11-11
SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码
这篇文章主要介绍了SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-04-04
MyEclipse2018中安装Mybatis generator插件的实现步骤
这篇文章主要介绍了MyEclipse2018中安装Mybatis generator插件的实现步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-02-02


最新评论