java使用数组和链表实现队列示例
程序员文章站
2024-02-20 20:28:46
(1)用数组实现的队列:复制代码 代码如下: //先自己定义一个接口 public interface netjavalist { &n...
(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 ;
}
}